ホームページ >バックエンド開発 >Python チュートリアル >Python For ループの Lambda 関数が最後の値のみを取得するのはなぜですか?

Python For ループの Lambda 関数が最後の値のみを取得するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 02:29:10486ブラウズ

Why Do Lambda Functions in Python For Loops Only Capture the Last Value?

for ループのラムダは最後の値のみを取得します

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。