在复习Python基本语法的时候,看到了迭代器模块,做一个简单的笔记。
Iterable:
所谓可迭代数据流,即能直接参与for循环的数据类型:Iterable
一类是集合数据类型,如list / tuple / dict / set / str /等;
一类是generator,包括生成器和带yield的generator function。
关于带yield的函数可以参考廖老师的教程https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
另外,生成器本身的next()函数也可以持续返回下一个值
Iterator:
迭代器,可以被next()函数调用并不断返回下一个值的对象称为迭代器。
所以,list / tuple / dict / set / str 之流是无法成为迭代器的,因为的Iterator对象表示的是一个不限大小的数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看作是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
集合数据类型如 list / dict / str / 等是Iterable可迭代对象但不是Iterator迭代器,不过可以通过iter()函数可以获得一个Iterator对象。
最后,帮助文档在这里https://docs.python.org/2/library/itertools.html#itertools.count