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列表本身的元素,必须通过下标的方式,访问到元素本身才可以,下给出修正后的函数代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def make_great(names): 2 for num in range(len(names)): 3 names[num]= "the Great "+names[num]
给出程序执行结果:
可见,得到了我们想要的结果
stay foolish,stay hungry