我是靠谱客的博主 懦弱蛋挞,最近开发中收集的这篇文章主要介绍迭代器与生成器-手动遍历迭代器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题

不同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
>>> 

最后

以上就是懦弱蛋挞为你收集整理的迭代器与生成器-手动遍历迭代器的全部内容,希望文章能够帮你解决迭代器与生成器-手动遍历迭代器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部