概述
问题
不同for循环如何遍历一个可迭代对象中的所有元素?
解决方案
为了手动遍历可迭代对象,可以适应next()函数并在代码中捕获StopIteration异常。例如下面手动读取一个文件中的所有行:
with open('test.txt','r') as f:
try:
while True:
line = next(f)
print(line,end='')
except StopIteration:
pass
f是一个迭代器(只有迭代器才能使用next(),可迭代对象是没有的),一般来说,StopIteration是用来指示迭代的结尾,使用next()函数可以返回一个指定值来标记结尾,比如None。如下面例子
with open('test.txt','r') as f:
while True:
line = next(f,None)
if line is None:
break
print(line,end='')
讨论
大多数情况下,我们会使用for循环语句来遍历一个可迭代对象。但是,偶尔也需要对迭代做更加精确的控制,这时候了解底层迭代机制就显得尤其重要了。
下面演示了迭代期间所发生的的基本细节
>>> items = [1,2,3,4]
>>> # 将列表items转换为一个迭代器
>>> it = iter(items) # it现在是一个迭代器
>>> next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
4
>>> next(it)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
next(it)
StopIteration
>>>
最后
以上就是懦弱蛋挞为你收集整理的迭代器与生成器-手动遍历迭代器的全部内容,希望文章能够帮你解决迭代器与生成器-手动遍历迭代器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复