1.可迭代对象:
可直接用于for循环的对象统称为可迭代对象(Iterable)。
目前我们已经知道的可迭代(可用于for循环)的数据类型有:
- 集合数据类型:如list、tuple、dict、set、str等
- 生成器(Generator)
可以使用isinstance()来判断一个对象是否是Iterable对象:
from collections import Iterable print(isinstance([], Iterable))
2. 迭代器:
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
生成器也是迭代器。可以使用isinstance()来验证一下:
from collections import Iterator print(isinstance((x for x in range(5)), Iterator))
3.迭代器理解
实际上,Python中的Iterator对象表示的是一个数据流,Iterator可以被next()函数调用,且不断返回下一个数据,直到没有数据可以返回时抛出StopIteration
异常错误。可以把这个数据流看做一个有序序列,但无法提前知道这个序列的长度。同时,Iterator的计算是惰性的,只有通过next()函数时才会计算并返回下一个数据
- 生成器对象既是可迭代对象,也是迭代器: 我们已经知道,生成器不但可以作用与for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。也就是说,生成器同时满足可迭代对象和迭代器的定义;
- 迭代器对象一定是可迭代对象,反之则不一定: 例如list、dict、str等集合数据类型是可迭代对象,但不是迭代器,但是它们可以通过iter()函数生成一个迭代器对象。
也就是说:迭代器、生成器和可迭代对象都可以用for循环去迭代,生成器和迭代器还可以被next()方函数调用并返回下一个值。(该段来自:https://www.cnblogs.com/yyds/p/6281453.html)
4. iter()函数 可以将可迭代对象转变成迭代器
isinstance(iter([]),Iterator)
True
import itertools Itor =iter([3,4,5,6,7,8]) #把列表变成一个迭代器 print(type(Itor)) while True: try: value = next(Itor) print(value) except StopIteration: print("迭代器超界了") break
5. 迭代器其实是一个流的操作,例如文件流
file = open("debug.txt","r",encoding="utf-8") for lineMsg in file:#这里的file其实是一个迭代器 print(lineMsg)