40. 什么是迭代器对象

迭代器对象就是有一个 next()函数可以调用的对象,这样可以不通过索引来访问。

当你使用一个循环机制(例如 for 语句)需要下一个项时, 调用迭代器的 next() 方法就可以获得它。当条目全部取出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代已经完成。

迭代器对象经常涉及到的两个函数分别是

  • next() 返回迭代器对象的下一项,当取完时,将会引发一个StopIteration异常。

  • iter() 返回一个迭代器对象。例如:

::
>>> a = [1, 2, 3]
>>> b = iter(a)
>>> type(b)
<class 'list_iterator'>
>>> next(b)
1
>>> next(b)
2
>>> next(b)
3
>>> next(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

列表a是一个可迭代对象,可以用它来构造一个迭代器对象b, 通过next函数来进行迭代。 迭代到最后会抛出一个StopIteration异常。

参考pep-234(https://www.python.org/dev/peps/pep-0234/)