函式閉包機制

RolandHe發表於2024-11-26

python中的閉包是指一個函式內部又巢狀了一個函式,內層函式可以使用外層函式的引數和區域性變數,外層函式返回內層函式的引用。
一般來說,一個函式的實參及區域性變數,只在函式執行過程中儲存,函式執行完後就會釋放掉。 但閉包機制的這種外層函式執行完後,由於其內層函式需要用到外層的資料,所以python會將這些資料持久化儲存。相當於把內層函式,及其用到的外部變數打包在一塊放在一個封閉的空間裡,這個空間我們就稱其為閉包。

每次執行外部函式時,都會生成一個獨立的閉包,而非共享同一個儲存空間。

def outter():
    data = []
    def inner(value):
        data.append(value)
        return data
    data=[0]
    return inner

f = outter()
print(f(1))
print(f(2))
print(f(3))
print(f.__closure__)  # 對於一個閉包,函式用到的外部資料存放在 __closure__ 中
print(hex(id(f(1))))  # 可以看出,閉包中返回的外部資料data的id與存放在__closure__中的data變數的id是相同的。

g = outter()  # g與f是兩個獨立的閉包,使用各自的外部資料data
print(g(1))
print(g(2))
print(g.__closure__)
print(hex(id(g(1))))

相關文章