Python参考语言:非本地定义

时间:2017-11-11 18:58:01

标签: python scope

this paragraph中,可以找到以下句子(我的重点):

  

非本地语句中列出的名称与全局语句中列出的名称不同,必须引用封闭范围中的预先存在的绑定(无法明确确定应创建新绑定的范围)。

我在括号中使用粗体句来解释前一句,这意味着为了使nonlocal a之类的非本地语句正确,a = 1之类的语句应该有问题决定在什么命名空间中添加(或修改)绑定,在本地命名空间或封闭的命名空间中(因为存在这样的命名空间已包含名称a的绑定)。

这是正确的,这是意图吗?

如果是,我相信即使对于a是全局的情况,措辞(在括号中)也会成立,因为"应该创建新绑定的范围无法明确确定#34;,这不是预期的。我对么?

1 个答案:

答案 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变量,它无法分辨哪个。