1 闭包问题的概念
简单来说, 函数定义了函数外引用的变量,并且该函数可以在定义外执行。
2闭包的相关例子
先来看一个问题吧
def my_fun1():
x = 5
def my_fun2():
x *= x
return x
return my_fun2()
my_fun1()
结果是:UnboundLocalError: local variable 'x' referenced before assignment
python认为第一个x=5的定义是外部函数,所以进入my_fun2()的时候就报错了。在python3之前是没有解决方案的,只能间接地通过容器类型来存放,因为容器类型不是存放在栈里面,所以会被屏蔽掉。
改进方法
def my_fun1():
x = 5
def my_fun2():
nonlocal x
x *= x
return x
return my_fun2()
my_fun1()
加入了 nonlocal 解决了问题