我有以下python代码:
def make_great(l):
l = ['The great ' + magician for magician in l]
magicians = ['Tom']
make_great(magicians)
print(magicians)
print语句打印原始列表,而不是make_great()
函数修改的列表。我试图想出一种方法来修改python列表的每个元素,而不显式访问它的索引,然后重新分配该索引一个新值。 magicians
列表现在不会指向基于Python内存模型的理解形成的新列表吗?我猜我没有得到理想的结果,因为这是一个范围问题?但是当我传入magicians
时,它会替换函数参数中的l
,以便python解释器实际看到magicians = ['The ...
?
答案 0 :(得分:3)
当您将其分配给l
时,您正在重新定义l
,而不是修改它。请改用l[:]
:
def make_great(l):
l[:] = ['The great ' + magician for magician in l]
您也可以返回列表并重新定义magicians
:
def make_great(l):
return ['The great ' + magician for magician in l]
magicians = ['Tom']
magicians = make_great(magicians)
print(magicians)
在这种情况下,您可以将magicians
分配给make_great(['Tom'])
:
magicians = make_great(['Tom'])
print(magicians)
答案 1 :(得分:0)
你的功能没有返回任何东西。您可以在函数中使用print语句,也可以返回修改后的列表然后将其打印
答案 2 :(得分:0)
def make_great(l):
return ['The great ' + magician for magician in l]
magicians = ['Tom']
magicians = make_great(magicians)
print(magicians)
make_great函数复制数组,因此您需要返回并将结果分配给魔术师。
您可以检查How do I pass a variable by reference?是否在函数中传递引用或值