python中的闭包问题
1一切皆对象
甚至可将一个函数的参数传递到另外的函数里
把一个函数当作另外一个函数的返回结果
def curve_pre():
def curve(x):
pass
f=curve_pre()
2闭包
def curve_pre():
a=25
def curve(x):
reture a*x*x
reture curve
a=10
f=curve_pre()
print(f(2))
输出为100
print(f.__closure__)
print(f.__closure__[0].cell_contents)
闭包:函数+环境变量(不可为全局变量)
3闭包的经典误区
数值累计
在函数中在等号左边的值会看作局部变量,改成全局变量:global 变量名
非闭包式解决:
origin=0
def news(steps):
global origin
new=origin+steps
origin=new
return origin
print(news(2)
print(news(7)
闭包解决:
origin=0
def factory(pos):
def go(steps):
nonlocal pos
new=pos+steps
pos=new
return new
return go
tourist=factory(origin)
print(tourist(2))
print(tourist(4))