ホームページ >バックエンド開発 >Python チュートリアル >For ループ内のラムダが最後の値のみを使用するのはなぜですか?

For ループ内のラムダが最後の値のみを使用するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 06:17:10229ブラウズ

Why Do My Lambdas in a For Loop Only Use the Last Value?

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

次のコードでは、

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」に設定されているかのように動作します。

この問題は、関数本体内の名前の評価タイミングが原因で発生します。 。提供されたコードでは、関数の実行時に名前が評価されます。その結果、ループ内で作成されたラムダはすべて、実行時に同じオプションの値、つまり「DEBUG」を参照します。

この問題を回避するには、次の変更を行うことができます:

__cMenu.add_command(label="{}".format(option),
    command=lambda opt=option: self.filter_records(column, opt))

option=option をラムダ関数の引数として導入することにより、各ラムダは、オプションに依存するのではなく、作成時にオプションの正しい値を取得します。実行時の値。これにより、各ラムダがオプションの目的の値に基づいて動作することが保証されます。

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

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