kakts-log

programming について調べたことを整理していきます

python lambda式とdef

 pythonでコーディングする上である処理をまとめてdefで関数の定義をして、利用するときはその関数名を呼び出して利用する。
defによる関数定義
def sum(x, y, z): return x+y+z

 言うまでもなくただ3つの引数を+演算子により足したものを戻り値として返すメソッドである。
そしてdef以外にもlambda式を用いれば処理を定義して呼び出すことが出来る。
lambda式による関数定義
lambda x, y, z: x+y+z
この時、lamdba式も同様に上記のdefで定義した物と処理は同じである。しかしここでdefとlamdbaでは本質的に何が違うのかというと、 lamdba式はあくまでも「式」であり、defはステートメントである。よってpythonの文法上defによる関数定義が使えない箇所でもlambdaによって処理をまとめることが出来る。
 defによる関数定義では。関数オブジェクトが関数名自動的に代入されるので、defでは定義の際に関数名をつけるので、呼び出し側からはこの名前を利用すればよい
 上記のlambda式のx+y+zは、戻り値としてこのx+y+zという"無名”の関数オブジェクトを返すことを意味している。 lambda式で作成した関数は、戻り値を変数に代入しない限りは無名の関数のままであるということがdefとlambda式との主な違いである。

オライリーの「初めてのpython」に書かれていたlambda式の特徴によると、lambda式は主にコールバック関数に使われることが多いと書いてあった。
そして主な特徴として文法上defステートメントを定義できない箇所で関数を作れるという所にlambdaの威力がある点を強調していた。
例えばリストのリテラルにlambda式を書くことで、関数を要素とするリストを作ることができる。