首页 > 解决方案 > 如何使用具有多个内部函数的非本地语句?

问题描述

有人可以解释一下为什么这个功能不起作用吗?“非本地”语句不应该可以x理解 in g,因此 in h

def f():
    def g():
        nonlocal x
        x= 1
    def h():
        print(x)


>>> SyntaxError: no binding for nonlocal 'x' found

编辑:我使用 nonlocal 是为了不在除以下x之外的任何地方定义g():我必须在我的代码中定义几个变量,并希望在函数中进行init_var()。为了方便起见,我想避免在我的主要功能中声明它们。有没有办法为此目的调整以前的代码?

标签: python-3.xpython-nonlocal

解决方案


来自文档

与语句中列出的名称nonlocal不同,语句中列出的名称global必须引用封闭范围中的预先存在的绑定(不能明确确定应该创建新绑定的范围)。

x在 的点上并不预先存在nonlocal。尝试x = None在之前def g():创建一个绑定nonlocal来引用。

文档所述的歧义问题很容易在这里看到:

def f():
    def g():
        def h():
            def i():
                def j():
                    nonlocal x

哪些功能应该可以访问x,哪些不应该?另一方面,这里很清楚:

def f():
    def g():
        def h():
            x = None
            def i():
                def j():
                    nonlocal x

在这种情况下,fand gdon't know ,xwhile和do。hij


推荐阅读