Lambda 関数が常に「5」を出力するのはなぜですか? Python で変数をキャプチャするためのガイド。

Susan Sarandon
リリース: 2024-10-26 17:26:03
オリジナル
384 人が閲覧しました

Why Does My Lambda Function Always Print

Lambda 関数での変数のキャプチャ: クロージャ

Lambda 関数では、外側のスコープから変数をキャプチャすることが一般的な問題です。ラムダ関数は、デフォルトで、それを囲んでいるスコープ内の変数を参照します。ただし、これらの参照の解決は、定義中ではなく実行時に行われます。

このコード スニペットについて考えてみましょう。ループを使用して 5 つのボタンを作成し、各ボタンにコマンドをバインドして、 lambda function:

<code class="python">for i in range(5):
    make_button = Tkinter.Button(frame, text ="make!",
                                 command= lambda: makeId(i))</code>
ログイン後にコピー

このコードは、クリックされたボタンのインデックスを出力すると期待するかもしれません。ただし、i の値はループの終了時 (i が 5 にインクリメントされた後) にキャプチャされるため、常に "5" が出力されます。

解決策: クロージャを使用する

この問題を解決するには、クロージャを使用します。クロージャは、それを囲んでいるスコープから変数をキャプチャし、定義時にそれらを初期化する関数です。これにより、各ボタンの i の正しい値を取得できるようになります。

<code class="python">make_button = Tkinter.Button(frame, text ="make!",
                              command= lambda i=i: makeId(i))</code>
ログイン後にコピー

ラムダ関数内で i=i を割り当てることで、ループからの i の現在の値で初期化されるローカル変数を作成します。 。これにより、各ボタンが目的のインデックスへの独自の参照を持つことが保証されます。

以上がLambda 関数が常に「5」を出力するのはなぜですか? Python で変数をキャプチャするためのガイド。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!