1.29 局部/全局变量傻傻分不清 ============================ .. image:: http://image.iswbm.com/20200804124133.png 在开始讲之前,你可以试着运行一下下面这小段代码。 .. code:: python # demo.py a = 1 def add(): a += 1 add() 看似没有毛病,但实则已经犯了一个很基础的问题,运行结果如下: .. code:: python $ python demo.py Traceback (most recent call last): File "demo.py", line 6, in add() File "demo.py", line 4, in add a += 1 UnboundLocalError: local variable 'a' referenced before assignment 回顾一下,什么是局部变量?在非全局下定义声明的变量都是局部变量。 当程序运行到 ``a += 1`` 时,Python 解释器就认为在函数内部要给 ``a`` 这个变量赋值,当然就把 ``a`` 当做局部变量了,但是做为局部变量的 a 还没有被还没被定义。 因此报错是正常的。 理解了上面的例子,给你留个思考题。为什么下面的代码不会报错呢? .. code:: python $ cat demo.py a = 1 def output(): print(a) output() $ python demo.py 1