Python闭包中的陷阱
**陷阱1**
def outer():
local=10
def inner():
local+=10
return local
return inner
resu=outer()
"""变量local是介于局部变量与全局变量之间的一种变量,
内层函数对其修改会报错,需要使用 nonlocal进行声明
"""
def outer():
local=10
def inner():
nonlocal local
local+=10
return local
return inner
fun=outer()
print(fun())
#陷阱2
def fun1():
lst=[]
for i in range(1,4):
def fun2():
return i**2
lst.append(fun2)
return lst
f1,f2,f3=fun1()
print(f1(),f2(),f3())
"""解决办法:使用局部变量接收参数1,"""
9 9 9
def fun3():
lst=[]
for i in range(1,4):
def fun4(_i=i):
return _i**2
lst.append(fun4)
return lst
f4,f5,f6=fun3()
print(f4(),f5(),f6())
1 4 9