了解Python Lambda 與本地值的綁定
在Python 中使用lambda 函數時,了解它們如何與本地變數交互非常重要,特別是當多個lambda 引用同一個變數時。
考慮以下範例:
<code class="python">def pv(v): print(v) x = [] for v in range(2): x.append(lambda: pv(v)) # Lambda binds to the reference of 'v' for xx in x: xx() # Prints 1 twice</code>
最初,您可能會期望清單「x」中的 lambda 函數引用目前「v」在他們創作的時候。然而,Python 並不是這樣運作的。相反,Python 在函數呼叫時計算變數名稱,導致兩個 lambda 引用「v」的最終值(即 1)。
實現所需的行為(列印0,然後列印1) ),您可以利用Python 的預設參數機制:
<code class="python">def pv(v): print(v) x = [] for v in range(2): x.append(lambda v=v: pv(v)) # Lambda binds to the copy of 'v' at creation time for xx in x: xx() # Prints 0 and then 1</code>
透過為「v」設定預設參數,lambda 函數將綁定到在創建時創建的“v”的本地副本,確保它們在以後使用時保留正確的引用。
記住,Python 在函數呼叫時而不是創建時尋找變數名稱。這項原則不僅適用於 lambda,也適用於常規函數,如下例所示:
<code class="python">x = "before foo defined" def foo(): print(x) # Prints "after foo was defined" x = "after foo was defined" foo()</code>
以上是Python Lambda 函數如何處理局部變數參考以及何時對它們求值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!