python 2 vs python 3 class with __iter__

时间:2017-01-07 17:47:17

标签: python python-2.7 python-3.x iterator

我试图找出如何使这个类在Python 3中工作,它在Python 2中工作。这是来自D. Beasley的生成器的教程。我是Python的新手,只是在线学习教程。

Python 2

class countdown(object):
    def __init__(self, start):
        self.count = start
    def __iter__(self):
        return self
    def next(self):
        if self.count <= 0:
            raise StopIteration
        r = self.count
        self.count -= 1
        return r

c = countdown(5)

for i in c:
    print i,

Python 3,无法正常工作。

class countdown(object):
    def __init__(self, start):
        self.count = start
    def __iter__(self):
        return self
    def next(self):
        if self.count <= 0:
            raise StopIteration
        r = self.count
        self.count -= 1
        return r

c = countdown(5)

for i in c:
    print(i, end="")

1 个答案:

答案 0 :(得分:3)

迭代器的特殊方法在Python 3中从next重命名为__next__,以匹配其他特殊方法。

根据next的定义,您可以在不更改代码的情况下使其适用于这两个版本:

__next__ = next

因此每个Python版本都会找到它所期望的名称。