Python学习第十一篇——for 的本质及如何正确修改列表

假如现在有一个列表:magicians_list = ['mole','jack','lucy'],现在想通过一个函数来实现,在列表的每个元素前面加上“the Great”的字样。现在通过一个函数来实现:

1 def make_great(names):
2     for name in names:
3         name = "the Great "+name
4         print("hahaha:"+name)
5     print(names)
6 
7 make_great(magicians_list)

运行上述代码,得到结果:

我们发现,执行完第5行代码,打印的names列表并未变化成 ['the Great mole','the Great jack','the Great lucy'],而是还和原来一样。思考原因是因为:我们要搞清楚的是,列表名才是变量,而列表中的具体的字符串并不是变量,当然我们也可以认为列表名[标号]是变量。

for name in names:中的name ,本质上是一个变量,且是一个与names 无关的独立的变量!!!!认识到这一点十分重要

for name in names 只是提供给我们一种访问列表names中元素的方式,并将names中的元素赋值给name 这个变量,因此后文中,我们对变量name 的操作,并不会影响到names列表中元素。只是会改变name 这个和列表毫不相关的变量。

从另一个角度讲,names中的元素是列表变量names的属性,相当于是一个伪常量(说是伪常量是因为我们仍然可以通过下标的方式访问)

因此,如果我们想修改names列表本身的元素,必须通过下标的方式,访问到元素本身才可以,下给出修正后的函数代码:

1 def make_great(names):
2     for num in range(len(names)):
3         names[num]= "the Great "+names[num]
View Code

给出程序执行结果:

可见,得到了我们想要的结果

原文地址:https://www.cnblogs.com/shaonianpi/p/9479770.html