Lambda 関数のクロージャ: 興味深いプロパティとキャプチャ戦略
Python では、ラムダ関数はクロージャに関して興味深い動作を示し、その仕組みを理解することが重要です効果的なコーディングのために。この記事では、クロージャ キャプチャに関する疑問を検討し、望ましい結果を達成するための実践的なアプローチを提供します。
1. Lambda 関数クロージャは何をキャプチャしますか?
ラムダ クロージャがループ内で作成される一般的なシナリオを考えてみましょう。各クロージャは、現在のループ変数の値を取得するように設計されています。ただし、クロージャーの動作を調べると、直感に反する結果が生じる可能性があります。
2.現在値のキャプチャ
現在の値のキャプチャの本質は、一般に考えられているようなポインタ参照によるものではありません。代わりに、クロージャは作成時に参照される変数の「スナップショット」をキャプチャします。したがって、その後その変数を変更しても、キャプチャされた値には影響しません。
3.エレガントなソリューション
ラムダ関数が意図した現在値を確実に取得できるようにするには、デフォルト値を持つパラメーターを利用することを検討してください。この手法は基本的に、目的の値の取得を「強制」します。以下に図を示します。
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i + a
デフォルト値 i (ループ変数) で i パラメーターを指定すると、クロージャーは作成時の i の現在値を取得します。その結果、ラムダ関数の外で i を変更しても、キャプチャされた値には影響せず、期待どおりの結果が得られます。
以上がPython の Lambda 関数クロージャはどのように変数をキャプチャしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。