Python Lambda 函數如何處理局部變數參考以及何時對它們求值?

Linda Hamilton
發布: 2024-10-27 04:06:02
原創
426 人瀏覽過

How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!