1.29 局部/全局变量傻傻分不清¶
在开始讲之前,你可以试着运行一下下面这小段代码。
# 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