考慮以下程式碼片段:
# 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中文網其他相關文章!