python 閉包

1 概念

閉包是在函數內嵌時提出的一個概念。

案例
def exFun():
x = 1
def inFun():
y = 1
return x + y
return inFun

inF1 = exFun()
inV1 = inF1()
print(inV1)

輸出:
2

函數內嵌: inFun()定義在exFun()內部
閉包: 函數inFun()運行時需要inFun函數的實現+外部函數exFun中的變量x,
創建函數inF1 = exFun(),將會把定義時涉及到的引用環境和函數體打包成一個整體(閉包)返回,在執行inF1()函數時將會由於在其作用域內找不到x變量而出 錯。

2 用法:注意事項

1 外部變量只能被引用,不能被修改

2 案例
flist = []
for i in range(3):
def foo(x): print(x + i)
flist.append(foo)

for f in flist:
f(2)
輸出:
4
4
4
因就在於返回的函數引用了變量i,但它並非立刻執行。等到3個函數都返回時,它們所引用的變量i已經變成了2,因此最終結果爲4。

3 應用場景

1 裝飾函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章