本文适合阅读对象:已学完Python基础课程,并能熟练使用Python基本用法编程。如果还有一些其他语言的基础最好不过了,如果没有Python基础或者正在学习中,请点击以下链接:
Python基础教程
一、如何编写Python-ful 循环
对于之前学过C语言或Java语言,开始学习Python后,写出来的代码可能是这样的,充满C或Java的风格:
items=['a','b','c']
i = 0
while i < len(items):
print(items[i])
i+=1
结果如下:
这段代码没毛病,执行正常,就是非常没有Python特色,而是C或Java充满的韵味~为什么这么说呢,主要有两点:
代码中手动跟踪了索引i,先初始化为零,然后在每次循环迭代时仔细递增索引。
为了确定迭代次数,使用len()获取items容器的大小。
如何写出Python特色的代码呢?微微老师专门起了个名字,叫做Python-ful的代码。
下面来重构第一个代码示例,Python其实无需手动更新索引,可以自动进行,在Python中可以用for循环很好地做到这一点,做法是利用内置的range()自动生成索引:
items=['a','b','c']
for i in range(len(items)):
print(items[i])
结果如下:
大家看出来了吗,已经比之前好一点,代码也精简了,但仍然不是很有Python特色,感觉依然有点像一个Java风格的迭代代码。为什么这么说呢?因为Python容器的遍历方式非常之简洁,在Python中,for循环实际上for-each循环,可以直接在容器或序列中迭代元素,无需索引查找,直接这样写就可以了:
完美实现!是不是有些被震撼到的感觉?!Python坚持极简主义理念,这个解决方案很有Python特色,非常整洁,看上去就像在阅读编程教科书中的伪代码一样。
注意:循环中不再跟踪容器的大小,也不必使用运行时索引来访问元素。现在容器本身负责分发将要处理的元素,如果容器是有序的,那么所得到的元素序列也是有序的;如果容器是无序的,那么将以随机顺序返回其元素,但循环仍然会遍历所有元素。
2.使用enumerate()升级循环
如果循环的结果需要用到项的索引,该怎么办呢?可以使用Python内置的enumerate()函数,这是Python很神奇的特性,可以让循环持有并返回当前运行的索引,大家一起来看看:
items=['a','b','c']
for i, item in enumerate(items):
print(f'{i}:{item}')
结果如下:
3. 循环同时获取字典的键和值
如果使用字典时需要同时循环迭代获取字典的键和值,该怎么办呢?for循环同样没有问题,只需同时写两个索引标志即可,一个代表键,一个代表值。
emails={'a':'s@sina.com',
'b':'h@163.com',
'c':'m@qq.com'}
for i, j in emails.items():
print(f'{i}:{j}')
发表评论 取消回复