迭代器是Python中非常重要的一个概念,很多的操作都是基于迭代器去做的, 比如说我们最常用的 for 循环,还有生成器其实也是一个迭代器,所以说迭代器也不是什么神秘的东西,主要需要区分清楚两个概念: 迭代器,可迭代对象。这里我们对迭代相关的知识做一个简单的梳理。
iter函数
- 其实系统内置的iter 函数只是调用对象的
__iter__
方法,这个方法按照协议会返回一个迭代器,使得for循环这样的语法结构能够进行下去。
可迭代对象
- 实现了
__iter__
方法,就是可以迭代的 - 可以返回自身作为迭代器,也可以返回其他一个迭代器对象
- 使用 For 循环的时候其实也是调用iter函数使对象返回一个迭代器,再使用迭代器进行循环
迭代器
- python2: 实现了 next 方法
- python3: 实现了
__next__
方法
next函数
- 调用迭代器的 next 或
__next__
方法,一直到结束对象函数返回 StopIteration 异常
迭代器与可迭代对象联系
- 其实没有什么必要联系
- 一个对象可以同时既是可迭代对象又是迭代器,只要方法里有 next(python2) 或
__next__
(python3) 又有__iter__
方法,惯用的做法是__iter__
方法返回自己作为迭代器。
NOTE
- 迭代器是单向的
- 迭代器转化为list或tuple之后就已经迭代到达尾端,不可再继续用了