【发布时间】:2014-06-19 14:59:31
【问题描述】:
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 关键字?感谢您对理解这一点的任何帮助。
【问题讨论】:
-
您是否尝试打印出
list_1以检查您的假设list_1 += [1]没有修改list_1? -
您说“这打印出
list_2 = [0, 1],这表明list_1 += [1]没有修改list_1变量。”为什么这会提示你? -
@BrenBarn 我相信 Jon 的意思是
list_1 += [1]不会导致list_1指向不同的列表,而list_1 = list_1 + [1]创建一个新列表并让list_1指向该新列表。 -
@Rob Watts 是的,这正是我的意思。
标签: python