列表分配给全局变量

时间:2014-01-13 18:35:12

标签: python

请看这段代码:

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()之类的列表方法,只是设置值?

3 个答案:

答案 0 :(得分:4)

在第二个示例中,a = [1]正在创建一个名为a的新局部变量,而不是引用全局变量a。为了引用你可以做的外部范围a

def x():
    global a
    a = [1]

请参阅global keyword的Python文档,特别是:

  

如果没有全局变量,就不可能分配给全局变量,   虽然自由变量可以在没有声明的情况下引用全局变量   全球性的。

在第一个示例中,a使用全局变量,因为您引用的变量在x()函数中不作为本地存在,但确实存在于全局变量中。

答案 1 :(得分:2)

在版本1中,当您在ax中使用y时,Python会“寻找”a使用,并在外部范围内找到它。

在版本2中,您在a内定义了一个本地x,然后分配给它; Python不需要查看其他范围。如果您想使用“外部a”,则必须明确表达您的意图:

def x():
    global a
    a = [1]

答案 2 :(得分:0)

第二个例子不是全局变量。您正在声明新的本地变量a,并将其分配给[1]