为什么参数只通过第二种方式改变?


```python
#first way
def make_great(magicians):
magicians = ['The Great '+ i for i in magicians]

#second way
def make_great2(magicians):
for i in range(len(magicians)):
magicians[i] = 'The great '+ magicians[i]
```

原参数只通过第二种方式改变。

在python中,变量名用于引用对象(例如您的示例中的列表)。在第一种方法中,您创建了一个新的列表对象(使用原始列表中的一些数据),并设置变量"魔术师"。指的是这个新对象。但是函数结束后,这个对象就不再使用了。你可以通过返回魔术师来让这个方法工作,然后调用它:Great_magicians = make_great(names)

相反,第二种方法不是创建一个新的列表对象。相反,它会去到原始列表中的每个位置,并用新字符串替换每个字符串。因此,当您完成后,原始列表已被修改。

第一个不改变传递的列表,而只是重新绑定局部变量magicians。您可以使用切片赋值使它成为一个突变:

def make_great(magicians):
magicians[:] = ['The Great ' + i for i in magicians]

第一种方法从第一种方法创建一个新列表,但不返回列表,因此新的magicians列表不会超出函数,并且在调用函数的作用域内,magicians仍然是原始列表。

第二种方法改变列表。

最新更新