第一个代码片段打印出[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] + a
或a += [1]
)时,变量将成为该作用域的局部变量。在您的情况下,这是函数swim()
。
您将在第一个代码中追加一个元素。a
id
仍然是一样的。
但是在第二个代码中,您正在重新定义变量a
,这会更改该变量的id
。这样你就可以UnboundLocalError
.