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