- 闭包的定义
三大特征:1.函数内部声明函数(即函数内部嵌套函数)
2.内部函数可以访问外部函数的局部变量
3.返回内部函数的引用
代码如下:
def fun1(a):
def fun2(b):
nonlocal a
a += 1
return a+b
return fun2
f = fun1(10)
print(f(3))
2.由于闭包引用了外部函数的局部变量会造成外部函数的局部变量没有及时释放
造成内存的浪费,而且外不函数的局部变量在内部函数引用的时候也会禁止修改;看下面 的代码:
def fun1(a):
def fun2(b):
a += 1
return a + b
return fun2
f = fun1(10)
print(f(20))
此时我们可以看到当内部函数对外部函数的局部变量修改的时候会出现程序异常
如何可以对外部函数的局部变量进行修改呢?我们可以使用关键字 nonlocal
def fun1(a):
def fun2(b):
nonlocal a
a += 1
return a + b
return fun2
f = fun1(10)
print(f(20)) # 31
print(f(20)) # 31
当使用了关键字nonlocal 后即可对外部函数的局部变量进行修改