day18 迭代器协议和for循环工作机制
- 迭代器协议:对象必须提供一个next方法,执行方法要么返回迭代器中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退)。
- 可迭代对象:实现了迭代器协议的对象(实现方式:对象内部定义了一个iter()方法)
- 协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。
for循环的实质是遵循迭代器协议,将文件转换成可迭代对象;序列类型字符串、列表、元组都有下标;但是非序列类型像字典、集合、文件对象没有下标的情况下while循环不可用,所以for循环就是基于迭代器协议提供了一个统一的可以便利所有对象的方法,即在便利之前,先调用对象的_iter_方法将其转换成一个迭代器,然后使用迭代器协议去实现循环访问,这样所有的对象就都可以通过for循环来遍历了,所以说for循环是无所不能的。