首頁 >後端開發 >Python教學 >為什麼 Python For 循環中的 Lambda 函數只捕獲最後一個值?

為什麼 Python For 循環中的 Lambda 函數只捕獲最後一個值?

Linda Hamilton
Linda Hamilton原創
2024-12-06 02:29:10449瀏覽

Why Do Lambda Functions in Python For Loops Only Capture the Last Value?

for 迴圈中的 Lambda 只取得最後一個值

在 for 迴圈中使用 lambda 函數時,lambda 擷取的值可能不是預期的值。這個問題的出現​​是由於 Python 垃圾回收的運作方式,導致只保留變數的最後一個值。

為了說明這個概念:

options = ["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):
    option = options[i]
    __cMenu.add_command(
        label="{}".format(option),
        command=lambda: self.filter_records(column, option)
    )

在此程式碼中,每個lambda 函數應該捕獲選項的唯一值,但所有選項的行為就像選項被設定為“DEBUG” ,它在循環中假定的最終值。

要解決這個問題,正如解決方案中所建議的,每個 lambda 函數必須捕獲自己的變數。這可以透過為option 分配一個新的局部變數來實現,如下所示:

for i in range(len(options)):
    opt = options[i]  # Assign a new variable to capture the unique value
    __cMenu.add_command(
        label="{}".format(opt),
        command=lambda: self.filter_records(column, opt)
    )

或者,可以如下重寫lambda 表達式:

lambda opt=option: self.filter_records(column, opt)  # Differentiate loop variable and function parameter

透過捕獲適當的值, lambda 函數可以在循環內獨立運行,從而實現預期的行為。

以上是為什麼 Python For 循環中的 Lambda 函數只捕獲最後一個值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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