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

ループ内の Lambda 関数が最後の値のみを返すのはなぜですか?

DDD
DDDオリジナル
2024-12-13 14:36:13447ブラウズ

Why Do Lambda Functions in Loops Only Return the Last Value?

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

当面の問題は、個別の値を取得する必要がある for ループ内でラムダ関数を利用するときに発生します。ローカル変数の。ただし、これらのラムダが呼び出されると、ループ内で値が変更されたにもかかわらず、ローカル変数に割り当てられた最終値を一貫して返すことがわかります。

問題の理解

この複雑な動作は、ラムダ関数の評価タイミングに起因します。具体的には、ラムダ関数本体内で使用される名前は、関数の定義時ではなく、関数の実行時に評価されます。

解決策

この問題を解決するには、ラムダが呼び出されたときではなく、ラムダ定義の時点でローカル変数の値を取得することが不可欠です。 1 つのアプローチは、キャ​​プチャする変数をラムダ関数の引数として宣言することです。

options = ["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):
    option = options[i]
    __cMenu.add_command(label="{}".format(option),
                        command=lambda opt=option: self.filter_records(column, opt))

コロンの前に「option=option」を設定することで、「option」の値を明示的に次のように割り当てます。ラムダ関数への引数。各ラムダが意図した値を確実に取得できるようにします。

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

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