我试图找出如何使这个类在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="")
答案 0 :(得分:3)
迭代器的特殊方法在Python 3中从next
重命名为__next__
,以匹配其他特殊方法。
根据next
的定义,您可以在不更改代码的情况下使其适用于这两个版本:
__next__ = next
因此每个Python版本都会找到它所期望的名称。