函数内部和外部的Python全局列表修改


问题内容

2我对Python相对较新(使用3.3.3),并且有一个与列表相关的问题。在函数内部修改全局列表变量时(请不要讲授关于全局变量的弊端),通常您无需在函数内部使用global关键字声明列表-
只要您坚持使用列表方法即可。特别是,您必须先使用global关键字才能使用增强加法。令我感到惊讶的是,在函数外部使用加法运算显然并没有修改列表变量(仅列表内容),因此我希望可以在不使用global关键字的情况下在函数内部使用它。这是我无法调和的两个示例:

list_1 = []

def my_func():
    list_1.append(0)
    #list_1 += [0]

my_func()
print('list_1 =', list_1)

list_1 = [0]正如预期的那样,此命令会打印出来,而注释掉的增强加法运算会产生有关在分配之前使用局部变量的投诉。

这是一个我无法与前一个示例保持一致的示例:

list_1 = [0]
list_2 = list_1
list_1 += [1]
print('list_2 =', list_2)

这将打印出来list_2 = [0, 1],这向我建议list_1 += [1]未修改list_1变量。我知道这list_1 = list[1] + [1]符合修改list_1的资格,但是增添似乎没有。为什么在函数内部的加法运算要求使用global关键字?感谢您的帮助,帮助您理解这一点。


问题答案:

问题在于,当解析函数主体时,所有在正常分配或扩充分配中使用的变量都被视为局部变量,因此当调用函数时,Python将不会在全局范围内查找那些变量,因此会引发错误。因此,您需要指定这些变量,global以告诉Python在全局范围内查找它们。

另一种替代方法是使用list.extend()代替+=

有关: