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

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

DDD
發布: 2024-12-22 01:57:14
原創
732 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板