我有以下代码:
def proc2(p):
p=p+[1]
y=[2,5]
proc2(y)
print(y)
z=[2,5]
z=z+[1]
print(z)
代码的输出是:
[2, 5]
[2, 5, 1]
我知道y没有被修改成[2,5,1]
。但是,y被重新分配到一个新的列表,即[2,5,1]
,对吗?那么为什么y仍然是指原值呢?如果z的值改变了,为什么y没有改变?
另外,我刚刚问了一个question,这个和这个差不多。那个问题被标记为另一个问题的重复。不过,我觉得他们有点不同。这就是为什么我再次发布我的问题。我想我一定错过了一些关于功能的东西。你知道吗
两种选择:
或者让函数返回新列表:
或者,让它在适当的位置修改
p
(并且可以选择返回它以进行更干净的编码):您的代码没有修改现有的
p
,而是创建了一个新的,但是它不会与外部作用域通信;因此,当函数退出时,就会消失。你知道吗变量y没有改变,因为变量p是函数的局部变量。函数结束后,此变量与y无关。你知道吗
不,代码中只有一个
y = ...
赋值。你知道吗执行函数时会发生以下情况:
因此,您的函数计算一个结果(一个新列表),在函数作用域内指定名称
p
,然后一旦函数退出p
就会丢失。你知道吗如果您不想编写一个使输入列表变异的函数,您需要返回计算值并重新指定名称
y
,以查看所需的效果。你知道吗请注意,即使您在函数中有一个
y = ...
赋值,该名称也是函数的本地名称,外部作用域也不会在意:最后,您可以告诉Python您指的是函数体中的全局
y
,但这被认为是糟糕的风格(在这里和大多数其他情况下都是如此)。你知道吗相关问题 更多 >
编程相关推荐