如何克隆Python生成器对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (126)

考虑这种情况:

#!/ usr / bin / env python
# -  *  - 编码:utf-8  -  *  - 
进口OS

walk = os.walk('/ home')

对于root,dirs,walk中的文件:
    对于dirs +文件中的路径名:
        print os.path.join(root,pathname)

对于root,dirs,walk中的文件:
    对于dirs +文件中的路径名:
        print os.path.join(root,pathname)

我知道这个例子有点多余,但您应该考虑我们需要walk多次使用相同的数据。我有一个基准测试场景,必须使用相同的walk数据才能获得有用的结果。

我试图walk2 = walk在第二次迭代中克隆和使用,但它没有奏效。问题是......我怎么能复制它?它有可能吗?

先谢谢你。

提问于
用户回答回答于

你可以使用itertools.tee()

walk, walk2 = itertools.tee(walk)

请注意,正如文档所指出的,这可能“需要大量的额外存储空间”。

用户回答回答于

如果你知道你将为每次使用迭代整个生成器,你可能会通过将生成器展开到列表并多次使用列表来获得最佳性能。

walk = list(os.walk('/home'))

扫码关注云+社区

领取腾讯云代金券