【发布时间】:2017-10-23 19:42:28
【问题描述】:
我有这段代码是用 Python 写的:
def trick(l,i):
if i==1:
return l[0];
else :
return l[1]
def foo(x):
x[0] = 'def'
x[1] = 'abc'
return x[1]
q = ['abc', 'def']
print(trick(q,1) == foo(q))
print(trick(q,1) == foo(q))
print(trick(q,0) == foo(q))
输出是这样的:
True
False
True
为什么第二个打印语句和第一个打印语句相同,但第二个打印语句打印“False”。当我在 Python 导师中可视化这段代码时,我知道 foo(x) 函数实际上会更改/交换原始/全局列表 'q' 中的元素,即使 'x' 应该具有本地范围。
我无法理解这一点。请帮忙。
【问题讨论】:
-
x是可变的。与范围无关。你更改了x中的项目 -
您没有单独的全局列表和本地列表。这里只有一个列表。见nedbatchelder.com/text/names.html
-
@Jean-FrançoisFabre 是的,我更改了 x 中的项目,而不是 q 中的项目。所以在第二个打印语句中,我调用了相同的语句,但输出为 False。为什么这样?我认为 q 保持不变,只有 x 改变了。
-
@user2357112 非常感谢。您可以回复为答案,以便我将其标记为正确答案。
标签: python list global-variables