Python のループ内のラムダが状態を共有するのはなぜですか?

Patricia Arquette
リリース: 2024-11-18 05:53:02
オリジナル
208 人が閲覧しました

Why Do Lambdas Within Loops in Python Share State?

ループ内のラムダ: 共有状態の対処

Python では、ループ内で作成されたラムダは、共有状態が原因で予期しない動作を示す可能性があります。例として、オブジェクトのプロパティにアクセスするラムダを作成することを目的とした次のコードを考えてみましょう:

lambdas_list = []
for obj in obj_list:
   lambdas_list.append(lambda : obj.some_var)
ログイン後にコピー

ただし、これらのラムダを反復して呼び出すと、最後のオブジェクトのプロパティ値が常に取得されます:

for f in lambdas_list:
    print(f())
ログイン後にコピー
ログイン後にコピー

この制限に対処するには、次の簡単な変更を行うことができます。

lambdas_list.append(lambda obj=obj: obj.some_var)
ログイン後にコピー

Byデフォルトの引数をラムダに提供すると、オブジェクトの現在の値が作成時に取得されます。これにより、各ラムダが独自の状態を保持し、望ましい結果が得られることが保証されます:

for f in lambdas_list:
    print(f())
ログイン後にコピー
ログイン後にコピー

以上がPython のループ内のラムダが状態を共有するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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