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

Patricia Arquette
發布: 2024-10-26 18:26:29
原創
912 人瀏覽過

Why Do All Buttons Print the Same Index When Using Lambda Functions in a Loop?

Python 中的 Lambda 閉包

在 Python 中,lambda 函數建立閉包,允許存取其範圍之外的變數。但是,在循環中使用時,此行為可能會導致意外結果。

問題陳述

考慮以下程式碼,其中使用循環創建了五個按鈕。每個按鈕都綁定一個命令來列印其索引:

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

行為

點擊時,所有按鈕都會列印相同的索引,始終為5 。發生這種情況的原因是lambda 中的變數解析發生在執行時。單擊按鈕時,循環已結束,所有按鈕的 i 都等於 5。

解決方案

要解決此問題,我們需要在每個 lambda 中建立捕獲 i 的正確值的局部變數。這可以透過將 i 作為參數傳遞給 lambda 來實現,如下所示:

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

這會為每個 lambda 建立一個局部 i 變量,該變數保留循環迭代中 i 的值。透過這樣做,我們確保每個按鈕列印預期的索引。

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

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