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

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

Susan Sarandon
發布: 2024-12-21 07:52:10
原創
422 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板