首頁  >  文章  >  後端開發  >  為什麼 Python Lambda 綁定到局部變數的值,而不是引用?

為什麼 Python Lambda 綁定到局部變數的值,而不是引用?

Linda Hamilton
Linda Hamilton原創
2024-10-28 06:37:021109瀏覽

 Why do Python Lambdas Bind to Local Variables' Values, Not References?

Python Lambda 函數和局部變數綁定

使用Python lambda 函數時,了解它們在引用局部變數方面的行為非常重要它們定義的範圍。下面的程式碼說明了這個問題:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda: pv(v))

for xx in x:
    xx()</code>

在這種情況下,我們期望看到 0 和 1 列印到控制台。然而,實際輸出列印 1 兩次。此行為源自於 Python lambda 綁定到局部變數的方式。

陷阱:早期綁定

Python lambda 在呼叫時不會綁定到局部變數的引用被創建了。相反,它們綁定到該特定時間點的變數值。因此,當呼叫 lambda 時,它會存取變數的當前值,而不是創建時可用的值。

解決方案:使用預設參數進行後期綁定

要將局部變數綁定到 lambda 函數並保留其正確引用,我們可以使用後期綁定。這是透過向 lambda 函數傳遞預設參數來實現的,如下所示:

<code class="python">x.append(lambda v=v: pv(v))</code>

透過此更改,lambda 將在建立 lambda 時綁定到 v 的值,而不是在呼叫它時。因此,當我們迭代列表 x 並呼叫每個 lambda 函數時,我們將獲得預期的輸出 0 和 1。

理解早期綁定

進一步澄清這個概念,請考慮以下示例:

<code class="python">x = "before foo defined"
def foo():
    print(x)
x = "after foo was defined"
foo()</code>

此程式碼將“定義foo 後”列印到控制台,演示變數是在函數呼叫時綁定的,而不是在創建時。

以上是為什麼 Python Lambda 綁定到局部變數的值,而不是引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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