1.闭包=函数+环境变量
def curve_pre():
a=25 #环境变量
def curve(x): #函数
return a*x*x
return curve
a=10
f=curve_pre()
print(f.__closure__)
print(f.__closure__[0].cell_contents)
print(f(2))
def f1():
a=10 #环境变量
def f2():
a=20
#a此时将被python认为是一个局部变量,不会改变外部变量的值,也不会引用外部环境变量,不是闭包
print(a)
print(a)
f2()
print(a)
f1()
2.解决问题:旅行者总共走了多少步
origin = 0
def go(step):
global origin #声明origin是全局变量
new_pos=origin+step
origin=new_pos
return new_pos
print(go(2))
print(go(3))
origin = 0
def factory(pos): #pos环境变量 能记忆状态
def go(step): #函数
nonlocal pos
new_pos=pos+step
pos=new_pos
return new_pos
return go
tourist=factory(origin)
print(tourist(2))
print(tourist(3))