- 迭代器协议:对有__next__方法的对象(迭代器对象)自动调用__next__方法,直到结尾引发stopIteration.
- 迭代工具:迭代工具按迭代协议处理迭代器
- 常见的工具有 for, list(), tuple(), str.join(), in map, sorted, zip, enumerate, filter, sum, any
- iterable可迭代对象:实现了__iter__方法的对象叫做可迭代对象
- iterator迭代器:实现了__next__方法的对象叫迭代器,迭代器需要同时实现__iter__和__next__方法
- for -- in 语句的执行逻辑:
- 首先判断对象是否有__iter__方法,如果有,先it = iter (instance),获取迭代器it,然后next(it)
- 否则,判断是否有__getitem__方法,有就按下标迭代
- 如果__iter__和__getitem__方法都没有,那么久报错
- 特殊情况是:str类型没有__iter__方法,但照样可以for-in,这是因为它有__getitem__方法
- 可迭代对象iterable根据有没有__next__方法分为两种:
- 有__next__方法:
- 其本身就是iterator迭代器。手动迭代时可以去掉it = iter(instance),直接next(iterable),比如文件对象。
- 无__next__方法:
- 手动迭代时必须执行it = iter(instance) 和 next(it),比如列表,range()。
- 有__next__方法:
- 可迭代对象iterable根据__iter__返回是否是自身分为两种:
- __iter__返回self自身:
- 那么it1 = iter(f), it2 = iter(f)是同一个对象,也就是说只支持一个迭代器,那么这时它必然有__next__方法
- __iter__不返回自身:
- 返回新的对象,那么it1 = iter(f), it2 = iter(f)是两个对象,也就是支持多个迭代器,此时要求返回要实现__iter__方法
- __iter__返回self自身:
python中关于迭代器和生成器的名词解释(python3)
最新推荐文章于 2021-05-28 18:08:04 发布