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 装饰函数