那里';在python 3的产量生成器中没有next()函数
在中,我有一个使用Python生成器的无休止的序列。但是相同的代码在Python3中不起作用,因为它似乎没有那里';在python 3的产量生成器中没有next()函数,python,python-3.x,Python,Python 3.x,在中,我有一个使用Python生成器的无休止的序列。但是相同的代码在Python3中不起作用,因为它似乎没有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(
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())
在Python3中,使用
next(uptofive)
而不是uptofive.next()
内置的
next()
函数也适用于Python2.6或更高版本。在Python3中,为了使语法更加一致,将next()
方法重命名为\uuuuuuuuuu()
。你可以用那个。这一点在本文中进行了解释
建议遵循Greg的解决方案并调用(然后尝试查找对象的
\uuuu next\uuu()
方法)。特别是因为该函数在版本2和版本3之间是可移植的,而这些方法(由于名称更改)并不相关。这段代码是如何工作的?我知道它确实有效,但从我读到的“当到达yield语句时,代码的执行就会停止”。(). 因此,在范围(n)中i的第一个中,为什么不产生简单地返回“1”?相反,在范围中的第一个值之后,代码继续,并生成整个范围,在我看来,这似乎是一次多次调用yield。我在理解细微差别方面有点困难。for
第一次调用从您的函数创建的生成器对象时,它将从一开始运行函数中的代码,直到命中yield
,然后返回循环的第一个值。然后,每个调用将再次运行您在函数中编写的循环,并返回下一个值,直到没有要返回的值为止。(摘自)Whyyyyyyyyyyyyyy@KennyWorden一致性(yyy),如中所述。