最近,在用Python做一个项目,遇到一个“坑”,总结出来,大家共同提高……
【实例演示】
图片来自网络
例子是这样的,有一个列表,在使用whie进行列表循环输出时,惯用C的思路,不小心使用了++i来递增变量索引。然后,没有报错,很奇怪,输出结果并不是列表内容,而是列表中第一个元素,构成了死循环。代码如下:
lst = ['a', 'b', 'c', 'd', 'e']
i = 0
while i < len(lst):
print(lst[i])
++i
输出是这样的:
测试结果
【结果分析】
我们本意是对列表逐项进行输出,可是得到了这样的结果,到底是为什么呢?我们知道,++i这种自增表示源于C语言,下面,我们来看下C语言和Python在变量定义中的区别。
Python与C语言在变量定义中的区别
当整形数据等于和大于255时,我们看下两个整形数据的id是否也相同。
Python整形对象创建过程
我们知道,Python整形数据是不可变的。因此,在自增运算中Python是不能直接通过++i或者i++这样来改变整形对象i的。如果要改变i的值,我们需要使用i += 1或者i = i + 1这样来改变整形对象的值,即重新赋值。因此,上述代码如果想逐个列出lst列表中的元素(如必须使用while循环),代码应该是这样的。
lst = ['a', 'b', 'c', 'd', 'e']
i = 0
while i < len(lst):
print(lst[i])
i += 1
但是这样不是很pythonic,不是吗?我们还是推荐使用下面两种方式:
for item in lst:
print(item)
或者一行内搞定print([i for i in lst]),既减少了代码量,又很Pythonic,如果对输出格式没有特殊要求直接print(lst)或者print(''.join(lst))也是不错的选择。
Python其实还有很多“坑”,欢迎大家留言讨论。
图片来自网络侵权请告知本人删除
我们后续也会跟大家分享更多的Python相关知识,请多关注……
转载请注明出处(百家号:Python高手养成)