ホームページ > バックエンド開発 > Python チュートリアル > Python Lambda 関数が参照ではなく値をキャプチャするのはなぜですか?これはどのように解決できるのでしょうか?

Python Lambda 関数が参照ではなく値をキャプチャするのはなぜですか?これはどのように解決できるのでしょうか?

Barbara Streisand
リリース: 2024-12-27 10:18:10
オリジナル
530 人が閲覧しました

Why Do Python Lambda Functions Capture Values, Not References, and How Can This Be Resolved?

Lambda 関数のクロージャ キャプチャについて

Python クロージャは、それが定義されている外側のスコープの状態をキャプチャします。具体的には、ラムダ関数内で参照されている、スコープ内に存在しない変数の値をキャプチャします。

この例では、ラムダ関数は変数 i をキャプチャし、ループの実行時に異なる値が割り当てられます。ただし、ラムダ関数は、i が指すオブジェクトへの参照をキャプチャしません。代わりに、作成時に i の値を取得します。

この動作は、adders[1](3) を呼び出したときの 6 という予期せぬ結果を説明しています。整数オブジェクトへの参照が期待されているにもかかわらず、ラムダ関数は i に割り当てられる最終値である値 3 を取得します。

各ラムダ関数で i の現在の値を保持するという望ましい動作を実現するには、引数のデフォルトと呼ばれる手法を使用できます。ラムダ関数にデフォルトの引数を指定すると、作成時の i の値がロックされます。 例:

for i in [0, 1, 2, 3]:
   adders[i] = lambda a, i=i: i+a
ログイン後にコピー

この場合、パラメータ i のデフォルト値は現在の値に設定されます。 iの値。ラムダ関数が呼び出されると、作成時にキャプチャされた i の値が使用されます。

このメソッドにより、adders 配列内の各ラムダ関数が意図した i の値をキャプチャし、期待される値を生成できるようになります。呼び出し時の出力。

以上がPython Lambda 関数が参照ではなく値をキャプチャするのはなぜですか?これはどのように解決できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート