為什麼我的按鈕命令總是在帶有 Lambda 的循環中列印相同的索引?

Susan Sarandon
發布: 2024-10-26 03:54:27
原創
810 人瀏覽過

 Why Does My Button's Command Always Print the Same Index in a Loop with a Lambda?

了解Lambda 中的閉包:解析變數

在這種情況下,您嘗試在循環中建立多個按鈕,每個按鈕按鈕觸發列印特定索引值的命令。但是,您遇到了一個問題,即按鈕的命令始終列印相同的索引“5”。

此行為源自於 lambda 中閉包的性質。定義 lambda 時,它會捕獲封閉範圍的變數並在執行時引用它們。在你的例子中,封閉範圍是循環,其中變數 i 代表目前索引。

不幸的是,當執行 lambda 時(按下按鈕時),i 的值已經達到了最後一個迭代並且對於所有按鈕都等於「5」。這是因為捕獲的變數 i 是對相同記憶體位置的引用,並且它所保存的值會隨著循環的進行而更新。

要解決此問題,您需要建立一個捕獲正確值的閉包每個按鈕的 i 。您可以透過為 lambda 函數中的 i 參數提供預設值來實現此目的。例如:

<code class="python">make_button = Tkinter.Button(frame, text="make!",
                              command=lambda i=i: makeId(i))</code>
登入後複製

透過提供 i=i 作為 lambda 參數的預設值,您將建立一個局部變數 i,它保存每個按鈕的正確索引值。當按下按鈕時,lambda 函數將使用捕獲的局部變數 i 執行,並列印正確的索引。

以上是為什麼我的按鈕命令總是在帶有 Lambda 的循環中列印相同的索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!