在python 3中的yield生成器中没有next()函数

时间:2012-09-05 04:45:22

标签: python python-3.x

this question中,我使用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())

2 个答案:

答案 0 :(得分:105)

在Python 3中,使用next(uptofive)代替uptofive.next()

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

答案 1 :(得分:41)

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

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