python迭代器的接口是什么?

时间:2012-10-26 21:05:25

标签: python interface iterator

  

可能重复:
  Build a Basic Python Iterator

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

class Infinity(object):
    def __init__(self):
        self.current = 0

    def __iter__(self):
        return self

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

3 个答案:

答案 0 :(得分:7)

你拥有的东西足以支持Python 2.x,但是在Python 3.x中你需要定义函数__next__而不是next,参见PEP 3114

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

答案 1 :(得分:1)

根据glossary,迭代器是具有next()方法和__iter__()方法的任何对象。

答案 2 :(得分:0)

Section 4.5 - Iterator Types

您需要为容器定义:

container.__iter__() #-> returns iterator

对于你的迭代器你必须定义:

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