分配与全局变量

时间:2018-01-21 15:26:54

标签: python python-2.7

在为具有相同名称的本地变量分配全局或封闭函数本地时,我发现错误。下面的代码说明了此问题,其中f()运行正常,而g()引发错误。看起来python知道a是在本地分配的,因此它表示对a的所有引用现在都是本地的,甚至a之前的引用实际上是在本地分配的。什么解释了这种行为?我正在运行Python 2.7.12 :: Anaconda 4.2.0(64位)。

In [18]: a = 1
    ...: 
    ...: def f():
    ...:   x = a
    ...:   print x
    ...: 
    ...: def g():
    ...:   a = a
    ...:   print a
    ...:   

In [19]: f()
1

In [20]: g()
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-20-d65ffd94a45c> in <module>()
----> 1 g()

<ipython-input-18-f3d970bdaa2b> in g()
      6 
      7 def g():
----> 8   a = a
      9   print a
     10 

UnboundLocalError: local variable 'a' referenced before assignment

1 个答案:

答案 0 :(得分:2)

简短的回答是,在g()中,你需要声明

global a

如果你想修改&#34; a&#34;从一个函数中,并使这个效果全局可见。但是,在您的情况下,使用&#34; a&#34;在g()中是转换这个变量名称来引用一个局部范围变量,然后隐藏全局&#34; a&#34;您尝试在作业的右侧使用,触发异常。这一点得到了更充分的解释here。还有一个Python FAQ解释了使f()工作而不需要&#34;全局a&#34;的规则。