【发布时间】:2020-04-28 20:28:40
【问题描述】:
假设我们有这个生成器函数:
def count_up_to(max):
count = 1
while count <= max:
yield count
count += 1
现在如果我想调用next() 函数,我必须将count_up_to 函数分配给一个变量,否则输出将始终为“1”。
下面的代码可以正常工作并遍历数字:
counter = count_up_to(10)
print(next(counter))
print(next(counter))
print(next(counter))
.
.
.
但是这个不起作用,一直打印“1”。
print(next(count_up_to(10)))
print(next(count_up_to(10)))
print(next(count_up_to(10)))
.
.
.
但是为什么呢? print(next(counter)) 和 print(next(count_up_to(10))) 有什么不同吗?!
【问题讨论】:
-
在您的最后一个 sn-p 中,您正在为每个打印行重新初始化您的生成器,因此每个
next()调用都会获得一个全新的迭代器。 -
当然不一样。在第一种情况下,您创建一个生成器对象并继续重复使用它。在第二种情况下,您每次使用它时都会创建一个新的生成器对象。你似乎已经发现了这一点?你到底有什么不明白的?
标签: python iterator iteration generator