Python之列表生成式、生成器、可迭代对象与迭代(4)

很明显上面讲的生成器也是迭代器。当然,我们可以使用isinstance()来验证一下:

from collections import Iterator print(isinstance((x for x in range(5)), Iterator))

输出结果为:True

2. 对迭代器的理解

实际上,Python中的Iterator对象表示的是一个数据流,Iterator可以被next()函数调用被不断返回下一个数据,直到没有数据可以返回时抛出StopIteration异常错误。可以把这个数据流看做一个有序序列,但我们无法提前知道这个序列的长度。同时,Iterator的计算是惰性的,只有通过next()函数时才会计算并返回下一个数据。

生成器也是这样的,因为生成器也是迭代器。

六、Iterable、Iterator与Generator之间的关系

生成器对象既是可迭代对象,也是生成器: 我们已经知道,生成器不但可以作用与for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。也就是说,生成器同时满足可迭代对象和迭代器的定义;

迭代器对象一定是可迭代对象,反之则不一定: 例如list、dict、str等集合数据类型是可迭代对象,但不是迭代器,但是它们可以通过iter()函数生成一个迭代器对象。

也就是说:迭代器、生成器和可迭代对象都可以用for循环去迭代,生成器和迭代器还可以被next()方函数调用并返回下一个值。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f77ac7316e5df9cf4f98cd5ef6820607.html