python迭代器的接口是什么?

What is the interface for python iterators?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Build a Basic Python Iterator

定义迭代器所需的方法是什么?例如,在下面的Infinity迭代器上,它的方法是否足够?是否有其他标准或事实上的标准方法定义迭代器?

1
2
3
4
5
6
7
8
9
10
class Infinity(object):
    def __init__(self):
        self.current = 0

    def __iter__(self):
        return self

    def next(self):
        self.current += 1
        return self.current

对于python 2.x,您所拥有的已经足够了,但是在python 3.x中,您需要定义函数__next__,而不是next,请参见pep 3114。

如果您需要与2.x和3.x兼容的代码,请同时包含这两者。


根据术语表,迭代器是使用next()方法和__iter__()方法的任何对象。


第4.5节-迭代器类型

您需要为容器定义:

1
container.__iter__() #-> returns iterator

对于迭代器,必须定义:

1
2
3
iterator.__iter__() #-> returns self
iterator.__next__() #-> returns next item
iterator.next() #(for Python2 compatibility) -> returns self.__next__()