ラムダ式
ラムダ式とは、関数を式として扱って変数に代入して使用できるようにする方法のことです。
変数に代入するって?もともと変数に入っているのではないかと思うかもしれません。
変数に代入することのメリットとしては、関数を引数に設定することが可能になる点があげられます。
また、処理が簡潔に書けることも魅力の一つです。
いろいろ訂正します。私の理解が間違っていたように思います。
ラムダ式とは、関数に名前を付けずに簡潔に宣言する方法です。
もちろん、宣言したラムダ式を変数に設定することができますが、Pythonコーディングスタイルガイド PEP8にあるようにあまり推奨されていない方法です。(@shiracamusさんありがとうございます。)
書き方
ます、サンプルとして通常の書き方から記述します。
引数に文字列を受け取り、「 World!」と結合して返却する関数をサンプルとして作成します。
def func(s):
return s + " World!"
ret1 = func("Hello")
print(ret1)
lamdaSample = (lambda s: s + " World!")
ret2 = lamdaSample("Hello2")
print(ret2)
Hello World!
Hello2 World!
通常の方法では、func関数を定義してその関数を実行して戻り値を得ています。
ラムダ式では、defを使用した関数定義は使用せずに、lambdaと記述して、続いて引数、コロン(:)、処理を記述できます。
lambda 引数:処理内容
どんなときに役に立つのか
このようにdefの代わりにラムダ式を使用しても大してメリットはありませんが、ラムダ式の力を発揮するのは関数の引数に関数を指定したいときです。ただし、単純な処理に限りますが。
pythonの標準では、リストの処理をするときに引数に関数を指定する関数がたくさん準備されています。
その中のひとつのmapについてみていきましょう。
def func(s):
return s+ " World!"
sampleList = ["TEST1", "TEST2", "TEST3"]
newList = []
for s in sampleList:
newList.append(func(s))
print(newList)
['TEST1 World!', 'TEST2 World!', 'TEST3 World!']
このようにリスト内の要素に対してすべてfunc関数を実行して新しいリストを作成したい場合、ラムダ式を使用するともっと簡単に記述することができます。
newList2 = list(map(lambda s: s + " World!", sampleList))
print(newList2)
['TEST1 World!', 'TEST2 World!', 'TEST3 World!']
この方法ではmap関数を利用しています。map関数は、引数1に処理内容(ラムダ式)、引数2にリストを受け取ります。
そして、リストの各要素に対して引数1に受け取った関数を実行して返却された値を返すイテレータを作成します。
map関数の中身を記述するとこんな感じではないでしょうか。
def mapSample(func, list):
for obj in list:
yield func(obj)
mapのほかにも要素を抽出するfilter関数等関数を引数にもつ関数が標準で準備されているので皆さん便利な関数を探してください。
最後に
ラムダ式は便利だと思います。ただ、シンプルに書ける分、複雑な処理を記述するにはどうしても向いていない面があります。
それを無理やり記述しようとして可読性が損なわれることもよくあると思いますので、使用するときは注意してください。
プログラミングで大事なことは、読んだ人がすぐ理解できることです。独りよがりなコードにならないようラムダ式を適切に利用して可読性の高いコードを目指しましょう!