ホームページ >バックエンド開発 >Python チュートリアル >Python For ループの Lambda 関数が最後の値のみを取得するのはなぜですか?
for ループ内でラムダ関数を使用する場合、ラムダによって取得される値が意図した値ではない可能性があります。この問題は、Python のガベージ コレクションの動作方法が原因で発生し、変数の最後の値のみが保持されます。
この概念を説明すると、
options = ["INFO", "WARNING", "DEBUG"] for i in range(len(options)): option = options[i] __cMenu.add_command( label="{}".format(option), command=lambda: self.filter_records(column, option) )
このコードでは、各ラムダ関数がオプションの一意の値を取得する必要がありますが、すべてはオプションが「DEBUG」に設定されているかのように動作します。これは、 loop.
この問題を解決するには、解決策で提案されているように、各ラムダ関数が独自の変数をキャプチャする必要があります。これは、次のように新しいローカル変数をオプションに割り当てることで実現できます:
for i in range(len(options)): opt = options[i] # Assign a new variable to capture the unique value __cMenu.add_command( label="{}".format(opt), command=lambda: self.filter_records(column, opt) )
または、ラムダ式を次のように書き換えることもできます:
lambda opt=option: self.filter_records(column, opt) # Differentiate loop variable and function parameter
適切な値をキャプチャすることで、ラムダ関数はループ内で独立して機能できるため、意図した動作を実現できます。
以上がPython For ループの Lambda 関数が最後の値のみを取得するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。