88

这个问题中,我有一个使用 Python 生成器的无穷序列。但是相同的代码在 Python 3 中不起作用,因为它似乎没有next()功能。该功能的等价物是什么next

def updown(n):
    while True:
        for i in range(n):
            yield i
        for i in range(n - 2, 0, -1):
            yield i

uptofive = updown(6)
for i in range(20):
    print(uptofive.next())
4

2 回答 2

129

在 Python 3 中,使用next(uptofive)而不是uptofive.next().

内置next()函数也适用于 Python 2.6 或更高版本。

于 2012-09-05T04:48:35.250 回答
45

在 Python 3 中,为了使语法更加一致,该next()方法被重命名为__next__(). 你可以用那个。这在PEP 3114中进行了解释。

建议遵循 Greg 的解决方案并调用内置next()函数(然后尝试查找对象的__next__()方法)。

于 2012-09-05T08:39:47.170 回答