通过将列表传递给函数来修改 python 中的列表

Modifying a list in python by passing it to a function

我有以下 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 ... ?

当您将它分配给 l 时,您是在重新定义 l,而不是修改它。使用 l[:] 代替:

def make_great(l):
    l[:] = ['The great ' + magician for magician in l]

您还可以 return 列表并重新定义 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)

您的函数没有 returning 任何东西。您可以在函数中包含打印语句或 return 修改后的列表,然后打印它

def make_great(l):
    return ['The great ' + magician for magician in l]

magicians = ['Tom']
magicians = make_great(magicians)
print(magicians)

make_great函数复制了你的数组,所以你需要return并将结果分配给魔术师。

您可以检查 How do I pass a variable by reference? 在函数中传递引用或值