递归关闭中的作用域错误

发布于 2021-01-29 15:58:05

为什么这样工作:

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
关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看