【发布时间】:2021-12-13 16:17:00
【问题描述】:
我正在使用来自here 和here 的答案来检查我的生成器x 是否为空。
from itertools import tee
def my_generator():
yield from range(100000000)
x = my_generator()
x, y = tee(x)
try:
next(y)
except StopIteration:
# x is empty do something
quit()
从x 中提取的元素会发生什么?他们可以被丢弃吗?还是必须保存在内存中以供y使用?
# now consume x entirely
for z in x:
print(x)
# how can y iterate over its objects ?
# will they have to reside in memory now ??
【问题讨论】:
-
你指的是什么
y?你的意思是z?生成器“产生”的元素可以在使用后丢弃。生成器只是一个“惰性列表”,每次需要从中获取元素时都必须调用它。 -
@MortenJensen 谢谢,我修正了错字 - 问题是由于 x 和 y 现在都“依赖”于“x”,当它的元素“消失”时会发生什么?
-
你的帖子仍然引用了
y,这让我很困惑。生成器是一种“函数”,一次返回一个项目。当您完成对它们的迭代时,生成器“已用完”,您必须重新创建生成器以再次迭代项目集合。集合本身没有任何反应,生成器只是集合的抽象。