lambda
前回、Pythonのnumpyで行列計算を行う方法を紹介しました。
今回は無名関数lambda式(ラムダ式)の使い方を紹介していきます。
それでは始めていきましょう。
関数のおさらいとlambda式
まずは関数のおさらいをしましょう。
関数は「def文」を使って一連のプログラムをまとめ、特定の処理を簡単に呼び出せるようにしたものでした。
作り方としては「def 関数名(引数1, 引数2, 引数3…):」という感じで作ります。
def calc(a, b):
return a+b
print(calc(5, 3))
実行結果
8
lambda式はこのdef文をさらに簡略化し、1行で書ける関数に特化したものです。
使い方としては「変数 = lambda 引数1, 引数2, 引数3…: 処理」です。
calc = lambda a, b: a+b
print(calc(5, 3))
実行結果
8
lambda式の条件分岐としてif文を使うこともできます。
その場合は「変数 = lambda 引数1, 引数2, 引数3…: Trueの場合の処理 if 条件 else Falseの場合の処理」とします。
more = lambda a: "more" if a > 2 else "less"
print(more(2))
print(more(3))
実行結果
less
more
無名関数
最初にlambda式は無名関数だとお話しました。
しかしここまでのlambda式ではしっかり名前が付いています。
無名関数としてどうやって使うかですが、これはmap関数と同時に使うことで名前を付けずに関数として機能させます。
例えばこんな感じ。
a = [1, 2, 3, 4, 5]
print(list(map(lambda num: num**2, a)))
実行結果
[1, 4, 9, 16, 25]
map関数では「map(関数, リスト)」とするとリスト内の要素を順に関数で処理してくれます。
ただし返ってくるのはmap型のオブジェクトであるため、「list(オブジェクト)」でリストに戻さないと中身を見ることができないことに注意です。
もしlambda式を使わないとこんな感じになります。
a = [1, 2, 3, 4, 5]
def double(num):
return num**2
print(list(map(double, a)))
実行結果
[1, 4, 9, 16, 25]
確かにlambda式を使った方がスッキリとまとまります。
しかし通常のdef文と異なり、この使い方では何度も使うことができないのがデメリットのようにも思えます。
簡単で使いまわさない関数はlambda式、複雑だったり、使いまわすといった場合にはdef文と使い分けるのが良いでしょう。
次回は1次元のリストから2次元のリストに変更する方法を紹介します。
ではでは今回はこんな感じで。
コメント