https://www.cnblogs.com/Lin-Yi/p/7305364.html
https://www.cnblogs.com/alplf123/p/9521331.html
# python 中的闭包
n = 10 #定义全局作用域变量
def fn(): #形成闭包
n = 100 #定义局部变量n
def inner():
nonlocal n
n += 1 #这里定义操作相同变量n无法调用上层作用中的变量,如果只读不写则可以正常访问
# python3 中新增nonlocal 关键字可以调用上层作用域中的变量
print(n)
inner()
return inner #返回内嵌函数的地址,从而形成闭包
#形成闭包的条件
#1、必须要有一个内嵌函数
#2、内嵌函数中要对自由变量的引用
#3、外部函数必须返回内嵌函数
t = fn()
t()
t()
print(n)
关于闭包函数的调用:
ifunc=func(6,9)和ifunc=func(2,8)时,a,b,c的内存地址并没有释放,当调用时,会去inner_func的内存地址去寻找结果,此时才会释放a,b,c的值
因此ifunc和ifunc1返回的值不同,因为去不同的内存地址去取值
