Python变量解析

Chi*_*ien 6 python

给出以下代码:

a = 0
def foo():
  # global a
  a += 1
foo()
Run Code Online (Sandbox Code Playgroud)

运行时,Python抱怨:UnboundLocalError:赋值前引用的局部变量'a'

但是,当它是一本字典时......

a = {}
def foo():
  a['bar'] = 0
foo()
Run Code Online (Sandbox Code Playgroud)

事情运行得很好......

任何人都知道为什么我们可以在第二块代码中引用a,但不是第一块?

Mar*_*ers 2

不同之处在于,在第一个示例中,您分配给a它创建一个隐藏a全局a.

\n\n

在第二个示例中,您没有进行分配,因此使用了a全局。a

\n\n

文档中对此进行了介绍。

\n\n
\n

Python 的一个特殊怪癖是 \xe2\x80\x93 如果没有有效的全局语句 \xe2\x80\x93 对名称的赋值总是进入最内部的范围。

\n
\n