Python 迭代器的接口是什么?

5

可能重复:
构建基本的Python迭代器

定义迭代器所需的方法是什么?例如,对于以下的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个回答

7
你现在的代码对于Python 2.x已经足够了,但是在Python 3.x中,你需要定义函数__next__来代替next,请参考PEP 3114
如果你需要兼容2.x和3.x,那么就同时包含两者的代码。

3
要同时定义两者,只需在类的主体结尾处添加语句 __next__ = next 即可。 - martineau

1

第4.5节 - 迭代器类型

您需要为您的容器定义:

container.__iter__() #-> returns iterator

对于您的迭代器,您必须定义:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接