gpt4 book ai didi

python - 在 python 中深度复制生成器

转载 作者:太空狗 更新时间:2023-10-29 16:56:49 24 4
gpt4 key购买 nike

我正在使用生成器函数,例如:

def foo():
i=0
while (i<10):
i+=1
yield i

现在,我想要在任意次数的迭代后复制生成器的选项,这样新副本将保留内部状态(在示例中将具有相同的“i”)但现在将独立于原始副本(即遍历副本不应更改原始文件)。

我试过使用 copy.deepcopy 但我得到了错误:

 "TypeError: object.__new__(generator) is not safe, use generator.__new__()"   

显然,我可以使用带计数器的常规函数​​来解决这个问题。但我真的在寻找使用生成器的解决方案。

最佳答案

我能想到的三种情况:

  • Generator 没有副作用,您只希望能够返回已经捕获的结果。你可以考虑 cached generator而不是真正的发电机。您也可以共享缓存的生成器,如果任何客户端走到您还没有去过的项目,它就会前进。这类似于 tee() 方法,但在生成器/缓存本身中执行 tee 功能,而不是要求客户端执行此操作。

  • Generator 有副作用,但没有历史记录,您希望能够在任何地方重新启动。考虑把它写成 coroutine ,您可以在其中随时传入值以启动。

  • 生成器具有副作用和历史,这意味着生成器在 G(x) 处的状态取决于 G(x-1) 的结果,因此您不能将 x 传回给它从任何地方开始。在这种情况下,我认为您需要更具体地说明您要尝试做什么,因为结果不仅取决于生成器,还取决于其他数据的状态。在这种情况下,可能有更好的方法。

关于python - 在 python 中深度复制生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21315207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com