【问题标题】:Error when assigning local variable with same name as a global variable分配与全局变量同名的局部变量时出错
【发布时间】:2018-01-21 23:44:16
【问题描述】:

将全局或本地封闭函数分配给同名的局部变量时出现错误。下面的代码说明了这个问题,其中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

【问题讨论】:

  • 总是函数有作用域并绑定到它的变量。refer this link
  • 我在这里看不到范围界定问题。当首次引用a 时,没有a 的本地定义,因此在您引用的答案中,它应该转到本地封闭的变量,然后是a 所在的全局变量。

标签: python python-2.7


【解决方案1】:

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

global a

如果您希望能够从函数中修改“a”并使此效果全局可见。但是,在您的情况下,在 g() 中使用“a”的效果是将此变量名转换为引用本地范围变量,然后隐藏您尝试在右侧使用的全局“a”你的任务的一面,触发异常。 here 对此进行了更充分的解释。还有一个 Python FAQ 解释了使 f() 无需“全局 a”即可工作的规则。

【讨论】:

  • 长答案是什么? :)
猜你喜欢
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多