遇到生成多个值的生成器对象,您可能会寻求恢复它以供重用。这种追求源于避免与生成器创建相关的耗时准备工作的愿望。
不幸的是,与衔尾蛇不同,生成器无法自我再生。然而,有几种策略可以提供喘息的机会:
像凤凰一样,您可以通过再次调用其父函数来复活生成器:
<code class="python">y = FunctionWithYield() for x in y: print(x) y = FunctionWithYield() for x in y: print(x)</code>
这种方法确保了新的计算,但代价是重复昂贵的准备步骤。
拥抱保存,您可以将生成器的结果存储在允许多次迭代的数据结构中:
<code class="python">y = list(FunctionWithYield()) for x in y: print(x) # Can iterate again: for x in y: print(x)</code>
虽然此方法可以防止重复计算,但它会产生存储开销。
这些选项之间的选择呈现了内存之间的经典权衡和加工。选项 1 牺牲了处理时间,而选项 2 增加了内存负担。
尽管 tee 正如其他人所建议的那样,提供了类似于内存缓冲的功能,但它仍然会产生相同的存储开销和性能特征作为选项 2。
以上是能否让 Python 生成器对象焕然一新以供重用?的详细内容。更多信息请关注PHP中文网其他相关文章!