为什么这样工作:

def function1():
       a = 10
       def function2():
          print a
       function2()

但这不是:
def function1():
    a = 10
    def function2():
        print a
        a -= 1
        if a>0:
           function2()
    function2()

我收到此错误:
UnboundLocalError: local variable 'a' referenced before assignment

最佳答案

该错误似乎并不能很好地说明根本问题。 Mike解释了这些消息,但没有解释根本原因。

实际的问题是,在python中,您无法为封闭变量赋值。因此在function2中,“a”是只读的。分配给它时,您将创建一个新变量,正如Mike指出的那样,先读取,然后再编写。

如果要从内部范围分配给外部变量,则必须作弊,如下所示:

def function1():
    al = [10]
    def function2():
        print al[0]
        al[0] -= 1
        if al[0]>0:
           function2()
    function2()

所以al是不可变的,但是它的内容不是,您可以在不创建新变量的情况下对其进行更改。

关于python - 递归关闭中的作用域错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2516652/

10-12 20:36