1.29 局部/全局变量傻傻分不清

http://image.iswbm.com/20200804124133.png

在开始讲之前,你可以试着运行一下下面这小段代码。

# demo.py
a = 1

def add():
    a += 1

add()

看似没有毛病,但实则已经犯了一个很基础的问题,运行结果如下:

$ python demo.py
Traceback (most recent call last):
  File "demo.py", line 6, in <module>
    add()
  File "demo.py", line 4, in add
    a += 1
UnboundLocalError: local variable 'a' referenced before assignment

回顾一下,什么是局部变量?在非全局下定义声明的变量都是局部变量。

当程序运行到 a += 1 时,Python 解释器就认为在函数内部要给 a 这个变量赋值,当然就把 a 当做局部变量了,但是做为局部变量的 a 还没有被还没被定义。

因此报错是正常的。

理解了上面的例子,给你留个思考题。为什么下面的代码不会报错呢?

$ cat demo.py
a = 1

def output():
    print(a)

output()

$ python demo.py
1