在this paragraph中,可以找到以下句子(我的重点):
非本地语句中列出的名称与全局语句中列出的名称不同,必须引用封闭范围中的预先存在的绑定(无法明确确定应创建新绑定的范围)。
我在括号中使用粗体句来解释前一句,这意味着为了使nonlocal a
之类的非本地语句正确,a = 1
之类的语句应该有问题决定在什么命名空间中添加(或修改)绑定,在本地命名空间或封闭的命名空间中(因为存在这样的命名空间已包含名称a
的绑定)。
这是正确的,这是意图吗?
如果是,我相信即使对于a
是全局的情况,措辞(在括号中)也会成立,因为"应该创建新绑定的范围无法明确确定#34;,这不是预期的。我对么?
答案 0 :(得分:2)
语言参考说外部作用域中的某些语句必须创建要引用的nonlocal
的变量。例如,这很好:
def f():
def g():
a = 3
def h():
def i():
nonlocal a
print(a)
但这不是:
def f():
def g():
def h():
def i():
nonlocal a
print(a)
因为在第一个代码段中,Python可以告诉nonlocal
应该使用a
函数中的g
变量。在第二个片段中,Python必须在其中一个封闭函数中创建一个新的a
变量,它无法分辨哪个。