ホームページ > バックエンド開発 > Python チュートリアル > ループ内でラムダを作成するときにラムダ クロージャの混乱を防ぐにはどうすればよいですか?

ループ内でラムダを作成するときにラムダ クロージャの混乱を防ぐにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-08 16:22:01
オリジナル
1040 人が閲覧しました

How Do You Prevent Lambda Closure Confusion When Creating Lambdas in Loops?

ループ内でのラムダ クロージャの混乱の防止

オブジェクトのリストを反復するループ内でラムダを作成する場合、次の点に注意することが重要です。ラムダクロージャーの動作。デフォルトでは、ラムダは変数が定義されるときに、それを囲んでいるスコープ内の変数をキャプチャします。ただし、ループ内で変数が変更された場合、ループ内で後から作成されたラムダは更新された値を参照します。

オブジェクトの some_var 属性にアクセスするラムダを作成する次の例を考えてみましょう。

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

その後、ラムダ リストを反復処理して各ラムダを呼び出すと、すべてのラムダで同じ値が得られる可能性があります。これは、ループ内で作成された最後のラムダが obj の最終状態をキャプチャし、その値がすべてのラムダによって返されるためです。

これを解決するには、次を使用してラムダによってキャプチャされるオブジェクトを指定できます。デフォルトの引数。これにより、各ラムダが正しいオブジェクト参照を確実にキャプチャします。

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

このアプローチを使用すると、各ラムダは、作成時に参照する予定だったオブジェクトをキャプチャします。これにより混乱が防止され、ループの後半で呼び出されたときにラムダが期待どおりに動作することが保証されます。

以上がループ内でラムダを作成するときにラムダ クロージャの混乱を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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