python闭包和nonlocal
闭包条件
1 在一个外函数中定义了一个内函数。
2 内函数里运用了外函数的临时变量。
3 并且外函数的返回值是内函数的引用。
一般情况下,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。
但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
在方法内引用方法外定义的非全局变量,如下示例是在内部方法inner使用外部方法outer中的变量num
test的时候已经调用完outer()了, 然后在调用返回的inner(),正常情况在调用test()方法时,outer函数已经返回了,本地的作用域也不存在了,但是闭包环境下可以调用。
变量的作用域
大家都知道,变量一般分为局部变量和全局变量,如下例子:
num1 = 10 #全局变量
def outer():
num2 = 20
def inner():
global num1
num3 = 30 #局部变量
return num1 + num2 + num3
return inner
test = outer()
test()
对于inner来说 num2这种非局部变量、也非全局变量的变量。
Nonlocal
想要对闭包的参数进行自增操作,需要引用nonlocal 赋值修改闭包参数