定义迭代器所需的方法是什么?例如,在以下Infinity
迭代器上,它的方法是否足够?是否有其他标准或事实上的标准方法来定义迭代器?
class Infinity(object):
def __init__(self):
self.current = 0
def __iter__(self):
return self
def next(self):
self.current += 1
return self.current
答案 0 :(得分:7)
你拥有的东西足以支持Python 2.x,但是在Python 3.x中你需要定义函数__next__
而不是next
,参见PEP 3114。
如果您需要与2.x和3.x兼容的代码,请同时包含。
答案 1 :(得分:1)
根据glossary,迭代器是具有next()
方法和__iter__()
方法的任何对象。
答案 2 :(得分:0)
您需要为容器定义:
container.__iter__() #-> returns iterator
对于你的迭代器你必须定义:
iterator.__iter__() #-> returns self
iterator.__next__() #-> returns next item
iterator.next() #(for Python2 compatibility) -> returns self.__next__()