1、什么是迭代器协议
对象需要提供next方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,终止迭代.
2、可迭代对象
实现了迭代器协议的对象就是可迭代对象(实现方式是,实现iter方法)
3、协议
协议是一种规定,可迭代对象实现迭代器协议,Python的内置工具(如for,sum,min,max,in),可以使用迭代器协议访问对象,例如文件之所以可以被for循环遍历,就是因为文件对象实现了迭代器协议,也就是说它有next()方法.
4、迭代器
迭代器对象就是实现了iter() 和 next()方法的对象.
iter()返回迭代器本身
next()返回容器的下一个元素,在结尾处引发StopInteration异常
如下:
it = iter(iterable) # 将一个可迭代对象转换为迭代器 next(it) # 获取下一个迭代器中的下一个值 `注意` list dic tuple string 并不是迭代器,它们只是可迭代对象.但是可以通过iter(list)的方法 将它们转换为迭代器.
你可能会问,为什么list、dict、str等数据类型不是Iterator?
这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。
可以把这个数据流看做是一个有序序列,但
我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。