Python速成班(第一版),埃里克·马特斯
8-10名伟大的魔术师
"8-9.魔术师:列出魔术师的名字。将列表传递给一个名为show_magicians()的函数,该函数打印列表中每个魔术师的名字。8-10。伟大的魔术师:从练习8-9中的程序副本开始。编写一个名为make_great()的函数,通过在每个魔术师的名字中添加“伟大”这个短语来修改魔术师的列表。调用show_magicians()来查看列表实际上已经被修改了。“
在本章中,作者非常明确地指出,在我定义的函数中调用一个列表作为参数将修改该列表(这就是这里的目标)。在某种程度上,为了避免对原始列表进行不必要的修改,应该使用函数" list“而不是单纯的list作为参数。
通过下面的代码,修改我函数中的列表魔术师正是我想要做的。到目前为止都没有用。如果有人能解释原因,我会非常感激的。此外,刚刚为这个场合创建了一个这样的账户,我可能会错过一些关于这个平台的礼仪、问题格式或其他特性的东西。在你认为合适的情况下,一定要启发和纠正我的这些话题。
提前谢谢。
代码:
magicians = ["Danton", "Professor", "Fallon", "Tesla"]
def make_great(whocares):
"""making great"""
for x in whocares:
x = x + ", the Great"
make_great(magicians)
show_magicians(magicians) # The list magicians remained as it was: Why?我确实找到了一种(笨重的,丑陋的)方法来修理它。这看起来更像是一个传说,而不是其他的东西:把每个魔术师从他们的魔术师名单中拿出来,在一个新的临时列表中附加他(带有“伟大”的后缀),然后用伟大的魔术师把那些伟大的魔术师插入到现在的空白的原始魔术师名单中。
我情不自禁地感觉到这忽略了练习设计的要点:由于作者非常明确地说明了参数魔术师如何从我的-allowing函数中对列表进行修改--魔术师-allowing是一个副本,从而阻止了make_great函数对术士列表的修改,所以练习应该是可以管理的,而不必使用新的列表作为缓冲区。
发布于 2022-11-06 05:19:44
当你有
for x in whocares:
x = x + ", the Great"这就给出了添加结果的名称x,在循环的每一次迭代中都会丢失这个名称!
这给出了一些过时的,但很好的概述了正在发生的事情。
https://david.goodger.org/projects/pycon/2007/idiomatic/handout.html#python-has-names
相反,构建一个新列表或将值直接重新分配到原始数组。
填充一个新的数组
results = []
for _ in _:
results.append(...)
return results # caller renames like mylist = function(mylist)通过方法修改列表成员
def my_function(my_list):
for index in range(len(my_list)):
my_list[index] += ... # mylist is updated分配给原始列表
def my_function(my_list):
for index, value in enumerate(my_list.copy()):
my_list[index] = value + ", the Great"https://stackoverflow.com/questions/74333264
复制相似问题