python 2 vs python 3 class with __iter__

python 2 vs python 3 class with __iter__

本问题已经有最佳答案,请猛点这里访问。

我正试图弄清楚如何使这个类在Python3中工作,它在Python2中工作。这是D.Beasley为发电机提供的教程。我对python不熟悉,只是在网上学习教程。

Python 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,不工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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="")


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

您可以通过以下next的定义使它在两个版本上都能工作,而不需要更改代码:

1
__next__ = next

所以每个版本的python都会找到它需要的名称。