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 裝飾函數