ラムダは実際には関数型プログラミングのアイデアから生まれた非常に強力な構造体であり、Pythonの近い将来に決して簡単に変更、再定義、または削除されるものではありません。これらは、関数をパラメーターとして渡すことができるため、より強力なコードを作成するのに役立ちます。したがって、一流の市民としての関数のアイデアです。
ラムダは混乱する傾向がありますが、しっかりとした理解が得られたら、次のようなクリーンでエレガントなコードを書くことができます。
squared = map(lambda x: x*x, [1, 2, 3, 4, 5])
上記のコード行は、リスト内の数値の二乗のリストを返します。もちろん、次のようにすることもできます。
def square(x):
return x*x
squared = map(square, [1, 2, 3, 4, 5])
前者のコードの方が短いことは明らかです。これは、map関数(または関数をパラメーターとして受け取る同様の関数)を1か所だけで使用する場合に特に当てはまります。これにより、コードがより直感的でエレガントになります。
また、@ David Zaslavskyが彼の回答で述べたように、リストが何らかの不明瞭な数学的な方法から値を取得する必要がある場合は、リスト内包表記が常にうまくいくとは限りません。
より実用的な観点から見ると、最近のラムダの最大の利点の1つは、GUIとイベント駆動型プログラミングにあります。Tkinterのコールバックを見ると、それらが引数として取るのは、それらをトリガーしたイベントだけです。例えば
def define_bindings(widget):
widget.bind("<Button-1>", do-something-cool)
def do-something-cool(event):
#Your code to execute on the event trigger
次に、渡す引数がある場合はどうでしょうか。マウスクリックの座標を格納するために2つの引数を渡すだけの簡単なもの。次のように簡単に行うことができます。
def main():
# define widgets and other imp stuff
x, y = None, None
widget.bind("<Button-1>", lambda event: do-something-cool(x, y))
def do-something-cool(event, x, y):
x = event.x
y = event.y
#Do other cool stuff
これはグローバル変数を使用して実行できると主張できますが、特にグローバル変数が特定の場所でのみ使用される場合は、メモリ管理とリークを心配して頭を痛めたくありませんか?それは単に貧弱なプログラミングスタイルになるでしょう。
要するに、ラムダは素晴らしく、決して過小評価すべきではありません。PythonのラムダはLISPのラムダ(より強力です)とは異なりますが、実際にはたくさんの魔法のラムダを使用できます。