在循環中使用 lambda 時,為什麼我的所有按鈕都會列印相同的索引?

Mary-Kate Olsen
發布: 2024-10-26 00:44:28
原創
591 人瀏覽過

Why do all my buttons print the same index when using a lambda in a loop?

了解 Lambda 中的閉包

嘗試在循環中使用 lambda 將命令綁定到按鈕時會出現一個常見問題。它不會列印預期的索引,而是一致地列印循環變數的最終值。這是由於閉包的變數解析機製而發生的。

在提供的範例中:

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

當執行 lambda 時,它將變數 i 解析為其當時的值。由於此時循環已完成,i 已增加到 5,導致所有按鈕列印相同的索引。

要修正此問題,可以使用語法 command= lambda i= 在 lambda 內建立局部變數我:。這會將 i 的目前值指派給 lambda 閉包捕獲的局部變數。

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

現在,lambda 將以每個按鈕的正確索引值執行。請注意,可以為局部變數分配任何名稱,以確保它與循環變數保持不同。

以上是在循環中使用 lambda 時,為什麼我的所有按鈕都會列印相同的索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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