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
4

3 回答 3

7

你所拥有的对于 Python 2.x 来说已经足够了,但是在 Python 3.x 中你需要定义函数__next__而不是next,参见PEP 3114

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

于 2012-10-26T21:07:47.420 回答
1

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

于 2012-10-26T21:07:16.830 回答
0

第 4.5 节 - 迭代器类型

您需要为您的容器定义:

container.__iter__() #-> returns iterator

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

iterator.__iter__() #-> returns self
iterator.__next__() #-> returns next item
iterator.next() #(for Python2 compatibility) -> returns self.__next__()
于 2012-10-26T21:08:56.483 回答