2我相对较新的Python(使用3.3.3)并且有一个与列表相关的问题。在函数内部修改全局列表变量时(请不要对全局变量的邪恶进行演讲),通常不需要在函数内部使用global关键字声明列表 - 只要您坚持使用list方法。特别是,如果不先使用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,但似乎并没有增加添加。为什么函数内部的扩充加法需要使用全局关键字?感谢您对此有任何帮助。
答案 0 :(得分:4)
问题是当解析函数体时,正常赋值或增广分配中使用的所有变量都被视为局部变量,因此当函数被调用时,Python将不会在全局范围内查找这些变量,因此它将引发错误。因此,您需要将这些变量指定为global
,以告诉Python在全局范围内查找它们。
另一种方法是使用list.extend()
代替+=
。
相关: