首頁 >後端開發 >Python教學 >為什麼在 Python 循環中創建的函數都會回傳相同的值?

為什麼在 Python 循環中創建的函數都會回傳相同的值?

DDD
DDD原創
2024-12-22 01:57:14658瀏覽

Why Do Functions Created in a Python Loop All Return the Same Value?

循環中的函數和 Lambda建立異常

當嘗試在循環內產生函數時,如下面的程式碼片段所示,出現問題:

functions = []

for i in range(3):
    def f():
        return i
    functions.append(f)

同樣,當使用lambda:

functions = []

for i in range(3):
    functions.append(lambda: i)

人們預期這些函數輸出不同的值(0、1 和2),但所有函數最終都會產生相同的值(2)。

解釋及解決方法

這種現像是由於變數綁定後期造成的。在Python函數中,變數在呼叫時解析,這表示當迴圈後呼叫函數時,i的值已經設定為2。為了修正這個問題,我們透過引入f(i=i)語法來採用早期綁定。在這裡,i 參數的預設值是在定義時建立的,從而導致早期綁定:

def f(i=i):
    return i

或者,使用閉包和「函數工廠」的更複雜的方法可確保早期綁定:好:

def make_f(i):
    def f():
        return i
    return f

在迴圈中,我們可以使用f = make_f(i) 而不是def 語句。

以上是為什麼在 Python 循環中創建的函數都會回傳相同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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