首頁 > 後端開發 > Python教學 > 理解 Python 中的閉包

理解 Python 中的閉包

Barbara Streisand
發布: 2024-12-23 14:26:09
原創
179 人瀏覽過

Understanding Closures in Python

在Python中,閉包是一個重要的概念,它允許函數「記住」它被創建的環境,即使在函數完成執行之後也是如此。閉包允許我們在不使用全域變數或類別實例的情況下實現有狀態函數。

在這篇文章中,我們將透過使用 nonlocal 關鍵字實作一個簡單的計數器來探索閉包。讓我們深入探討一下!

什麼是閉包?

當巢狀函數引用其封閉範圍中的變數時,就會發生閉包,從而允許它即使在封閉函數完成執行後仍保留對這些變數的存取權。當您想要將狀態或行為封裝在函數中時,閉包特別有用。

非本地關鍵字

在Python中,我們使用nonlocal關鍵字來修改最近封閉範圍內的非全域變數。如果沒有 nonlocal 關鍵字,內部函數就無法修改其封閉範圍內的變數;相反,它會建立一個新的局部變數。 nonlocal 關鍵字透過告訴 Python 我們想要使用封閉範圍內的變數來解決這個問題。

實作帶有閉包的計數器

讓我們建立一個簡單的計數器函數,它使用閉包來追蹤計數,而不依賴全域變數或類別。

第 1 步:定義 make_counter 函數

我們將建立一個名為 make_counter 的函數,它將傳回一個內部函數增量。內部函數每次呼叫都會增加一個計數變數。

步驟2:使用nonlocal修改Count變數

為了確保increment函數修改make_counter函數作用域中定義的count變量,我們將使用nonlocal關鍵字。

這是實作:

def make_counter():
    count = 0  # Variable in the enclosing scope

    def increment():
        nonlocal count  # Tell Python to modify the `count` from the enclosing scope
        count += 1  # Increment the counter
        return count  # Return the current count

    return increment  # Return the inner function, which forms the closure
登入後複製

第三步:使用計數器

現在我們有了 make_counter 函數,我們可以建立計數器的實例並多次呼叫它來查看計數器增量。

counter = make_counter()

print(counter())  # Output: 1
print(counter())  # Output: 2
print(counter())  # Output: 3
print(counter())  # Output: 4
print(counter())  # Output: 5
登入後複製

解釋

  • count 變數在 make_counter 函數中初始化為 0。
  • 每次我們呼叫increment函數(由make_counter回傳)時,它都會使用nonlocal關鍵字修改封閉範圍內的count變數。 由於閉包屬性,即使在 make_counter 函數完成執行後,increment 函數仍保留對 count 的存取。

為什麼要使用閉包?

閉包提供了一種強大且優雅的方式來將狀態封裝在函數中。它們在以下情況下特別有用:

  • 您想要追蹤一個值而不將其暴露給全域範圍。
  • 您需要一個函數來在多次呼叫中記住其先前的狀態(就像我們的反例)。
  • 您不想使用全域變數或建立類別來進行簡單的狀態管理。

閉包可用於更進階的用例,例如裝飾器、記憶和回調。

以上是理解 Python 中的閉包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板