ホームページ >バックエンド開発 >Python チュートリアル >ループ内で作成されたラムダが最後のオブジェクトを参照するのはなぜですか?
ループ内でのラムダ作成のカスタマイズ
オブジェクトのリストを操作し、オブジェクト属性にアクセスするループ内でラムダを作成しようとする場合、すべてのラムダがリストの最後のオブジェクトを参照するという問題が発生しました。
これに対処するには、各ラムダの正しいオブジェクト参照を取得することが重要です。次のコード スニペットは、改善されたソリューションを提供します。
lambdas_list = [] for obj in obj_list: lambdas_list.append(lambda obj=obj: obj.some_var)
ラムダ関数のキーワード引数として obj=obj を設定することにより、各反復内で obj の新しいスコープを作成します。これにより、各ラムダが正しいオブジェクト参照を取得し、後続のループ反復での変更から分離されるようになります。
その結果、lambdas_list を反復して各関数を呼び出すと、各オブジェクトに対して期待される結果が得られます。 obj_list にあります。このメソッドは、リスト内の最後のオブジェクトを参照するすべてのラムダの問題に効果的に対処し、より堅牢で Python 的なソリューションを提供します。
以上がループ内で作成されたラムダが最後のオブジェクトを参照するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。