python - 在 Python 中重置生成器对象

我有一个由多个 yield 返回的生成器对象。准备调用这个生成器是相当耗时的操作。这就是为什么我想多次重复使用生成器。

y = FunctionWithYield()
for x in y: print(x)
#here must be something to reset 'y'
for x in y: print(x)

当然,我正在考虑将内容复制到简单列表中。有没有办法重置我的发电机?

最佳答案

发电机不能倒带。您有以下选择:

  1. 再次运行生成器函数,重新开始生成:

    y = FunctionWithYield()
    for x in y: print(x)
    y = FunctionWithYield()
    for x in y: print(x)
    
  2. 将生成器结果存储在内存或磁盘上的数据结构中,您可以再次对其进行迭代:

    y = list(FunctionWithYield())
    for x in y: print(x)
    # can iterate again:
    for x in y: print(x)
    

选项 1 的缺点是它会再次计算值。如果那是 CPU 密集型的,你最终会计算两次。另一方面,2 的缺点是存储。整个值列表将存储在内存中。如果值太多,则可能不切实际。

所以你有经典的内存与处理权衡。我无法想象在不存储值或再次计算它们的情况下倒带生成器的方法。

https://stackoverflow.com/questions/1271320/

相关文章:

linux - 带有单引号和双引号的 bash 别名命令

python - 为什么 ~True 结果是-2?

python - SQLAlchemy:打印实际查询

python - 在 Python 中转义 HTML 的最简单方法是什么?

c++ - Netbeans 7.2 显示 "Unable to resolve identifie

python - 如何使用 Python 的 timeit 为代码段计时以测试性能?

linux - 如何从文件中提取单个字节 block ?

python - 在 Python 中拆分空字符串时,为什么 split() 返回一个空列表,而 s

linux - 如何查找几分钟前访问/创建的文件

linux - Bash - 如何从给定的文本文件中删除所有空格?