先用非闭包解决
origin = 0
def go(step):
origin += step
return origin
print(go(3))
print(go(5))
print(go(6))
什么鬼?居然说origin
还没被赋值?
原因是:函数内部 =
左边出现的变量会被视为局部变量,既然局部变量有,python就不会去上面找。那么问题来了:你局部变量还没定义,怎么就开始引用了呢?
Traceback (most recent call last):
File "/Users/scottxiong/Desktop/end/python/basic/enum/c6.py", line 7, in <module>
print(go(3))
File "/Users/scottxiong/Desktop/end/python/basic/enum/c6.py", line 4, in go
origin += step
UnboundLocalError: local variable 'origin' referenced before assignment
改写一下代码
origin = 0
def go(step):
new_pos = origin + step #这里的origin始终为0
return new_pos
print(go(3))
print(go(5))
print(go(6))
3
5
6
不是我们想要的
origin = 0
def go(step):
new_pos = origin + step
return origin
print(go(3))
print(go(5))
print(go(6))
更不是我们想要的
0
0
0
global关键字解决问题
origin = 0
def go(step):
global origin
new_pos = origin + step
origin = new_pos
return new_pos
print(go(3))
print(go(5))
print(go(6))
3
8
14