ホームページ > バックエンド開発 > Python チュートリアル > Python Lambda 関数がループ変数の最終値を取得するのはなぜですか? これはどのように修正できますか?

Python Lambda 関数がループ変数の最終値を取得するのはなぜですか? これはどのように修正できますか?

Susan Sarandon
リリース: 2024-12-20 03:26:09
オリジナル
438 人が閲覧しました

Why Do Python Lambda Functions Capture the Final Value of a Loop Variable, and How Can This Be Fixed?

Lambda 関数のクロージャ キャプチャを理解する

プログラミングにおける簡潔で便利なツールである Lambda 関数を使用すると、匿名関数をクロージャに格納できます。 Python では、クロージャは外側のスコープをキャプチャして外部変数にアクセスしますが、この動作は時々驚くべきものになることがあります。

一連のラムダ関数がループ内で初期化され、特定の数値を追加するシナリオを考えてみましょう。彼らの意見。直感的には、これらの関数は作成時のループ変数の値を保持すると予想されるかもしれません。ただし、実際の結果は異なります。すべてのラムダ関数はループ変数の最終値をキャプチャします。

これは、Python のクロージャーが特定の変数やオブジェクトへの参照ではなく、外側のスコープをキャプチャするために発生します。言い換えれば、ラムダ関数は効果的にループ変数 i への参照を埋め込み、ループの進行につれて変化します。したがって、これらの関数のいずれかが呼び出されると、i の最終値が利用され、予期しない出力が発生します。

Lambda 関数での値のキャプチャの強制

これを回避するにはループ変数の意図した値を発行してキャプチャするには、デフォルト値を持つパラメーターを使用してキャプチャを強制する必要があります。変数をラムダ関数内のパラメータに割り当て、その意図した値のデフォルト値を指定することで、必要なキャプチャ動作を維持できます。

例:

# Initialize an array of lambda functions
adders = [None, None, None, None]

# Create lambda functions with forced capture of i
for i in [0, 1, 2, 3]:
    adders[i] = lambda a, i=i: i + a

# Call a lambda function with input
print(adders[1](3))  # Output: 4
ログイン後にコピー

結論

ラムダ関数のキャプチャの仕組みを理解し、これを活用することでこの技術を使用すると、クロージャによってキャプチャされた値を制御して、コード実行時に望ましい動作を保証することができます。

以上がPython Lambda 関数がループ変数の最終値を取得するのはなぜですか? これはどのように修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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