【问题标题】:What is the interface for python iterators? [duplicate]python迭代器的接口是什么? [复制]
【发布时间】:2012-10-17 03:52:35
【问题描述】:

可能重复:
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

【问题讨论】:

    标签: python interface iterator


    【解决方案1】:

    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__()
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • @Arion:要同时定义两者,只需在类主体的末尾添加声明 __next__ = next
        猜你喜欢
        • 1970-01-01
        • 2021-09-17
        • 2018-01-28
        • 2012-04-16
        • 2015-01-01
        • 2018-12-16
        • 1970-01-01
        • 2014-04-18
        • 1970-01-01
        相关资源
        最近更新 更多