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



第一个代码片段打印出[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吗?

似乎是一个常见问题,如此链接中所述。原因是swim内部的变量a一旦有分配给a,就会变成局部变量。它遮蔽了外部a,并且在函数swim赋值之前没有定义局部a,所以误差上升。

谢谢你们所有人的回答!

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

您将在第一个代码中追加一个元素。a id仍然是一样的。

但是在第二个代码中,您正在重新定义变量a,这会更改该变量的id。这样你就可以UnboundLocalError.

相关内容

  • 没有找到相关文章

最新更新