首頁 >後端開發 >Python教學 >為什麼循環中的 Lambda 函數會捕捉最後一個值而不是每次迭代的值?

為什麼循環中的 Lambda 函數會捕捉最後一個值而不是每次迭代的值?

Susan Sarandon
Susan Sarandon原創
2024-12-21 07:52:10426瀏覽

Why Do Lambda Functions in Loops Capture the Last Value Instead of Each Iteration's Value?

循環中的Lambda

考慮以下程式碼片段:

# directorys == {'login': <object at ...>, 'home': <object at ...>}
for d in directorys:
    self.command["cd " + d] = (lambda : self.root.change_directory(d))

目標是建立一個包含兩個帶有鍵「的函數的字典” cd 登入”和“cd home”。 login」。

要理解這種意外行為,重要的是要考慮lambda 函數如何在嵌套循環中工作。當lambda 函數在循環中定義時,它會捕獲周圍範圍的變量。在這種情況下,循環中的變數d 被每個lambda 函數捕獲。 self.command 字典時,所有lambda 函數都捕獲了相同的d 變量,它是循環中d 的最後一個值。為了解決這個問題,我們需要確保每個lambda 函數捕捉不同的d 值。函數並提供預設值:

現在,lambda 函數內的d 使用該參數,即使它具有相同的名稱。迭代將其綁定到正確的d 值。

以上是為什麼循環中的 Lambda 函數會捕捉最後一個值而不是每次迭代的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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