Python嵌套函数中的变量范围

时间:2016-05-27 02:04:09

标签: python function python-3.x scope global-variables

第一个代码段打印[0, 3]

def func():
    a = [0]

    def swim():
        a.append(3)
        # a = [1]+a
        return a
    return swim()

print(func())

第二个代码段引发错误" UnboundLocalError:局部变量' a'在分配之前引用"

def func():
    a = [0]

    def swim():
        # a.append(3)
        a = [1]+a
        return a
    return swim()

print(func())

a功能swim是否可见{/ 1}}

3 个答案:

答案 0 :(得分:2)

这似乎是this link中所述的常见问题。原因是只要有a的赋值,swim内的变量a就会成为局部变量。它会影响外部a,并且在函数a中赋值之前未定义本地swim,因此错误会增加。

感谢你们所有人'解答!

答案 1 :(得分:-2)

您在第一个代码中附加了一个元素。 id的{​​{1}}仍然相同。

但是在第二个代码中,您正在重新定义变量a,它正在更改该变量的a。这样你得到id

答案 2 :(得分:-2)

当您在作用域中执行a = [1] + aa += [1]等分配时,该变量将成为该作用域的本地变量。在您的情况下,这是函数swim()