6

来自 Python 语言参考(v 3.1,请参见此处 - http://docs.python.org/py3k/reference/executionmodel.html#naming-and-binding):

取消绑定封闭范围引用的名称是非法的;编译器将报告一个 SyntaxError。

但是当我运行以下代码时:

a = 3

def x():
  global a
  del(a)

print(a)
x()

它工作正常;当我更改通话顺序时:

x()
print(a)

我得到一个 NameError,而不是 SyntaxError。显然,我没有正确理解规则。谁能解释一下?谢谢。

4

2 回答 2

4

我认为该规则不适用于全球范围。全局范围始终是完全可访问的。

这是一个例子:

>>> def outer():
...     a=5
...     def inner():
...         nonlocal a
...         print(a)
...         del a
...
SyntaxError: can not delete variable 'a' referenced in nested scope
于 2011-02-20T09:34:15.173 回答
3

我联系了 python-devel 列表上的人,这是我得到的:

实际上你现在可以做到 3.2+。我现在已经删除了那句话。

所以,实际上这是一个文档错误。

于 2011-03-01T19:16:01.403 回答