Python のラムダを理解しようとしています。lambda
これは、実生活では忘れるべき「興味深い」言語項目の 1 つでしょうか?
確かに、必要になる可能性のあるエッジケースがいくつかあると思いますが、そのわかりにくさ、将来のリリースで再定義される可能性 (さまざまな定義に基づく私の推測)、およびコーディングの明確さの低下を考えると、避けるべきでしょうか?
これは、C 型のオーバーフロー (バッファ オーバーフロー) を思い出させます。つまり、最上位の変数を指し、他のフィールド値を設定するためにオーバーロードします。これは、一種の技術者の見せかけの技のように感じますが、メンテナンス コーダーにとっては悪夢です。
ベストアンサー1
について話してるのラムダ式? のように
lambda x: x**2 + 2*x - 5
これらは実は非常に便利です。Python は関数プログラミングと呼ばれるプログラミング スタイルをサポートしており、関数を他の関数に渡して処理を実行できます。例:
mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])
は、元のリストの3の倍数の要素mult3
を に設定します。これは、[3, 6, 9]
def filterfunc(x):
return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])
もちろん、この特定のケースでは、リストの内包表記と同じことを実行できます。
mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]
(または としてもrange(3,10,3)
)、リスト内包表記を使用できず、ラムダ関数が最も短い記述方法となる、より洗練された使用例も数多くあります。
別の関数から関数を返す
>>> def transform(n): ... return lambda x: x + n ... >>> f = transform(3) >>> f(4) 7
これは、Python のデコレータなどの関数ラッパーを作成するためによく使用されます。
反復可能なシーケンスの要素を
reduce()
>>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9]) '1, 2, 3, 4, 5, 6, 7, 8, 9'
代替キーによる並べ替え
>>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)) [5, 4, 6, 3, 7, 2, 8, 1, 9]
私はラムダ関数を定期的に使用しています。ラムダ関数に慣れるまでにはしばらく時間がかかりましたが、最終的にはラムダ関数が言語の非常に貴重な部分であることを理解しました。