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

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

Dec 20, 2024 pm 04:22 PM

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

了解在循環或推導式中建立函數時的後期綁定

嘗試在循環中建立函數時,您可能會遇到以下情況:儘管期望輸出不同,但所有函數都會傳回相同的值。出現此行為的原因是後期綁定,其中變數的值在執行時解析。

Python 的後期綁定

在 Python 中,函數和 lambda 可以透過執行時預設綁定變數。這意味著調用函數時會查找其中使用的任何變數。在循環中,循環迭代器 i 稍後會被解析,到那時,它會引用循環後 i 的最終值。

例如,在以下程式碼片段中:

functions = []

for i in range(3):
    def f():
       return i

    functions.append(f)
登入後複製

函數清單中的所有函數都引用相同的 i 值,循環結束後 i 為 2。

強制提前執行綁定

要解決此問題,您需要強制早期綁定,這確保 i 的值在函數定義時綁定。實現此目的的一種方法是使用參數的預設值,如下所示:

functions = []

for i in range(3):
    
    def f(i=i):
       return i
    
    functions.append(f)
登入後複製

透過為 i 參數提供預設值,可以強制執行早期綁定。傳遞給 f 函數的 i 值在函數定義時解析,而不是在函數執行時解析。

使用函數工廠

另一種方法是使用函數工廠來建立具有所需綁定的函數。這涉及創建一個附加函數,該函數接受要綁定的變數並傳回帶有早期綁定變數的巢狀函數:

def make_f(i):

    def f():
        return i
        
    return f
登入後複製

在循環中,您可以使用f = make_f(i)來創建具有適當的早期綁定的函數。

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

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

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

我如何使用美麗的湯來解析HTML? 我如何使用美麗的湯來解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美麗的湯來解析HTML?

python中的圖像過濾 python中的圖像過濾 Mar 03, 2025 am 09:44 AM

python中的圖像過濾

如何使用Python查找文本文件的ZIPF分佈 如何使用Python查找文本文件的ZIPF分佈 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分佈

如何使用Python使用PDF文檔 如何使用Python使用PDF文檔 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文檔

如何在django應用程序中使用redis緩存 如何在django應用程序中使用redis緩存 Mar 02, 2025 am 10:10 AM

如何在django應用程序中使用redis緩存

如何使用TensorFlow或Pytorch進行深度學習? 如何使用TensorFlow或Pytorch進行深度學習? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch進行深度學習?

python對象的序列化和避難所化:第1部分 python對象的序列化和避難所化:第1部分 Mar 08, 2025 am 09:39 AM

python對象的序列化和避難所化:第1部分

如何在Python中實現自己的數據結構 如何在Python中實現自己的數據結構 Mar 03, 2025 am 09:28 AM

如何在Python中實現自己的數據結構

See all articles