闭包可以保存运行环境
思考下面的代码会输出什么?
list = [] for i in range(3): def func(a): return i+a _list.append(func) for f in _list: print(f(1))
1 , 2, 3吗?如果不是又该是什么呢? 结果是3, 3, 3 。
因为,在Python中,循环体内定义的函数是无法保存循环执行过程中的不停变化的外部变量的,即普通函数无法保存运行环境!
想要让上面的代码输出1, 2, 3并不难,“术业有专攻”,这种事情该让闭包来:
_list = [] for i in range(3): def func(i): def f_closure(a): # <<<--- return i + a return f_closure _list.append(func(i)) # <<<--- for f in _list: print(f(1)) #闭包 ,在函数内当遇到return会把子层函数之前的值保存在内存中