Python迭代器:在类中使用__iter__方法

时间:2016-05-04 17:15:23

标签: python python-2.7

我一直在阅读Iterators in the python 2.7.x Documentation 链接中给定的示例程序定义了一个__iter__方法,使类"可迭代"

但是,我找不到在课堂上定义的__iter__方法的任何用法,即说 - 即使我没有定义__iter__,我仍然可以迭代该对象类。

代码1#来自文档

class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)
    def __iter__(self):
        return self
    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

代码2#除了定义 iter 方法外,它是相同的。

class ReverseMod:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)
    # Missing __iter__()
    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

输出:

rev = Reverse('spam')
revMod = ReverseMod('spam')

rev.next() #m
rev.next() #a
rev.next() #p
...

revMod.next() #m
revMod.next() #a
revMod.next() #p
...

来自反向 ReverseMod 的对象的行为方式相同。唯一的事情是当我做一个iter(revMod)它说

  

TypeError:迭代非序列

为什么我甚至需要关注自己做什么(revMod)?为什么我需要关心定义__iter__。似乎我可以在不定义__iter__的情况下获得执行 .next()的功能。

0 个答案:

没有答案