首頁 >後端開發 >Python教學 >為什麼我的 Lambda 函數總是列印「5」?在 Python 中捕捉變數的指南。

為什麼我的 Lambda 函數總是列印「5」?在 Python 中捕捉變數的指南。

Susan Sarandon
Susan Sarandon原創
2024-10-26 17:26:03478瀏覽

Why Does My Lambda Function Always Print

在 Lambda 函數中捕獲變數:閉包

在 lambda 函數中,從封閉範圍捕獲變數是一個常見問題。預設情況下,lambda 函數會引用其封閉範圍內的變數。然而,這些引用的解析發生在執行時,而不是定義期間。

考慮這個程式碼片段,其中我們使用循環創建五個按鈕,並將命令綁定到每個按鈕以使用lambda 函數:

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

您可能期望此程式碼將列印所單擊按鈕的索引。但是,它總是列印“5”,因為 i 的值是在循環結束時捕獲的,即 i 遞增到 5 之後。

解決方案:使用閉包

為了解決這個問題,我們可以使用閉包。閉包是一個函數,它從其封閉範圍捕獲變數並在定義時初始化它們。這使我們能夠捕獲每個按鈕的正確 i 值。

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

透過在 lambda 函數中分配 i=i,我們建立一個局部變量,該變數使用循環中 i 的當前值進行初始化。這確保每個按鈕都有自己對其預期索引的引用。

以上是為什麼我的 Lambda 函數總是列印「5」?在 Python 中捕捉變數的指南。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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