Python 迭代器与可迭代对象

时间:2023-01-02 09:45:43

迭代器是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之后就已经迭代到达尾端,不可再继续用了