在python中,iterator是一个容器对象,它实现了iterator协议,它的实现基于下面2个方法:

  • next 它返回容器中的下个元素
  • iter 它返回iterator自己

一个Iterators对象可以通过python内置的函数iter所创建成一个序列,例如

>>> i = iter('abc')
>>> i.next()
'a'
>>> i.next()
'b'
>>> i.next()
'c'
>>> i.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

当这个序列超出界限时,系统将会触发StopIteration异常,这使得Iterators停止获取下个元素,这个循环是一个道理。我们可以自己定义一个iterator,按上面说的,必须重写next和__iter__这两个方法:

>>> class MyIterator(object):
...     def __init__(self, step):
...         self.step = step
...     def next(self):
...         """Returns the next element."""
...         if self.step == 0:
...             raise StopIteration
...         self.step -= 1
...         return self.step
...     def __iter__(self):
...         """Returns the iterator itself."""
...         return self
...
>>> for el in MyIterator(4):
...     print el
3
2
1
0

Iterators在python中是一比较底层的功能和概念,任何一个程序没有它们可以照样运行。但是它提供了一个非常有趣的功能,叫generators。我将在另外一篇文章里讲解。