Python函数参数

Python函数参数,python,Python,为什么append方法在原始的数字列表上工作,它改变了数字列表,但我不能将数字列表重新分配给[4,5,6] def change(numbers_list): numbers_list.append(4) numbers_list = [4,5,6] numbers = [1,2,3] change(numbers) print(numbers) 当代码运行此命令时: [1,2,3,4] 为什么不[4,5,6]?追加的功能是将项目添加到现有列表中。没有效果的原因是你做了很多无

为什么append方法在原始的数字列表上工作,它改变了数字列表,但我不能将数字列表重新分配给[4,5,6]

def change(numbers_list):
    numbers_list.append(4)
    numbers_list = [4,5,6]
numbers = [1,2,3]
change(numbers)
print(numbers)
当代码运行此命令时:

[1,2,3,4]

为什么不[4,5,6]?

追加的功能是将项目添加到现有列表中。没有效果的原因是你做了很多无效的事情。对于一个,您正在调用函数,但从未将
return
分配给
变量
。其次,您使用的
append
void
,因为直接在您声明
numbers\u list=[4,5,6]
之后。如果函数的目标只是将
[1,2,3]
更改为
[4,5,6]
,则设置如下

def change(numbers_list):
    numbers_list = [4,5,6]
    return numbers_list

numbers = [1,2,3]
numbers = change(numbers)
print(numbers)
# [4, 5, 6]
虽然这样就足够了

numbers = [1, 2, 3]
numbers = [4, 5, 6]
print(numbers)
# [4, 5, 6]

这个PyCon讲座解释了这里的工作机制:关于Python名称和值的事实和神话:@NedBatchelder谢谢!您的演示非常精彩。函数不必显式返回任何内容,默认情况下它将返回
None
,并且函数的返回值不必指定给变量。您的回答没有解释OP代码的行为:为什么将4添加到
数字
,但
数字
没有更改为
[4,5,6]
更改
功能的第二行?@ducminh这是一个开放的社区,如果你有能力比我更好地帮助OP,那么你可以发布答案,您应该花时间发布一个回复,引导他指出我回复中的缺陷:)我认为最好向OP解释他/她的代码的行为,因为这个问题可能会让很多Python初学者感到困惑和困扰。此外,OP明确询问了当作为参数传递给函数时,列表发生变化的奇怪行为。在这方面,Ned Batcheld的谈话已经很好地解释了这种行为。