【发布时间】:2012-08-29 18:28:18
【问题描述】:
在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())
【问题讨论】:
-
这段代码是如何工作的?我知道它确实有效,但从我读到的内容来看,“当达到 yield 语句时,代码的执行停止”。 (python-course.eu/python3_generators.php)。那么在第一个
for i in range(n)中,为什么yield不简单地返回“1”?相反,在范围中的第一个值之后,代码继续,并产生整个范围,在我看来,这似乎是一次多次调用 yield。我很难理解其中的细微差别。 -
for第一次调用从你的函数创建的生成器对象,它会从头开始运行你的函数中的代码,直到它到达yield,然后它会返回第一个值的循环。然后,每个其他调用将再次运行您在函数中编写的循环,并返回下一个值,直到没有值可以返回。 (取自this tutorial)
标签: python python-3.x