Python 嵌套函数中的变量作用域

Lia*_* Li 5 python scope function global-variables python-3.x

第一个代码片段打印[0, 3]出来。

def func():
    a = [0]

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

print(func())
Run Code Online (Sandbox Code Playgroud)

第二个代码片段引发错误“UnboundLocalError:赋值前引用的局部变量‘a’”

def func():
    a = [0]

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

print(func())
Run Code Online (Sandbox Code Playgroud)

到底a功能是否可见/可访问?swim

Lia*_* Li 4

正如此链接中所述,这似乎是一个常见问题。原因是一旦对 进行赋值,a内部变量swim就变成局部变量a。它遮蔽了 external a,并且 locala在 function 赋值之前没有定义swim,因此错误增加。

谢谢大家的回答!