首頁  >  文章  >  後端開發  >  在循環中使用 lambda 時,為什麼我的所有按鈕都會列印相同的索引?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-26 00:44:28575瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn