先用非闭包解决

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

results matching ""

    No results matching ""