请看这段代码:
def x():
a.append(1)
def y():
print a
a = []
x()
y()
输出:
[1]
和此:
def x():
a = [1]
def y():
print a
a = []
x()
y()
输出:
[]
我不明白为什么我不能在函数中显式设置全局列表变量a
,而不使用.append()
之类的列表方法,只是设置值?
答案 0 :(得分:4)
在第二个示例中,a = [1]
正在创建一个名为a
的新局部变量,而不是引用全局变量a
。为了引用你可以做的外部范围a
:
def x():
global a
a = [1]
请参阅global keyword的Python文档,特别是:
如果没有全局变量,就不可能分配给全局变量, 虽然自由变量可以在没有声明的情况下引用全局变量 全球性的。
在第一个示例中,a
使用全局变量,因为您引用的变量在x()
函数中不作为本地存在,但确实存在于全局变量中。
答案 1 :(得分:2)
在版本1中,当您在a
和x
中使用y
时,Python会“寻找”a
使用,并在外部范围内找到它。
在版本2中,您在a
内定义了一个本地x
,然后分配给它; Python不需要查看其他范围。如果您想使用“外部a
”,则必须明确表达您的意图:
def x():
global a
a = [1]
答案 2 :(得分:0)
第二个例子不是全局变量。您正在声明新的本地变量a
,并将其分配给[1]