Lambda 関数の変数のキャプチャ
ループ内で Lambda 関数を使用する場合、変数のスコープを理解することが重要です。ローカル変数をコピーする通常の関数とは異なり、ラムダ関数はローカル変数を参照します。
指定されたコードを考えてみましょう:
<code class="python">for m in ('do', 're', 'mi'): funcList.append(lambda: callback(m))</code>
ここで、ラムダ関数は外側のスコープから m の値を取得します。ただし、ループの終了後、m は最後の値 ('mi') を保持します。各ラムダ関数が呼び出されると、この共有 m 変数が参照され、その結果、出力「mi」が複数回返されます。
この問題を克服して、各ラムダが m の個別の値を確実に取得できるようにするには、「」と呼ばれる手法を使用します。デフォルト引数":
<code class="python">for m in ('do', 're', 'mi'): funcList.append(lambda m=m: callback(m))</code>
m を同じ名前のデフォルトパラメータにすることで、各ラムダは変数の独自のインスタンスをキャプチャし、期待される出力を保証します:
"do"
「れ」
「み」
以上がループ内の Lambda 関数の変数を適切にキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。