python itertool_Python itertools tee,克隆和缓存

tee没有什么神奇的。它很聪明;-)在任何点,tee克隆传递给它的迭代器。这意味着克隆的迭代器将从的这一点生成由传入迭代器生成的值。但是他们不可能重现在调用tee之前产生的值。在

让我们用比你的例子简单得多的东西来说明:>>> it = iter(range(5))

>>> next(it)

0

0现在消失了-永远。tee()无法取回:

^{pr2}$

因此a推动it生成下一个值。缓存的就是这个值,这样其他克隆也可以复制它:>>> next(b)

1

为了得到这个结果,it没有被触碰-从内部缓存中检索了1。现在所有的it、a和{}都产生了1,1也永远消失了。在

我不知道这是否回答了你的问题:“tee()知道我想要什么吗?”似乎需要心灵感应;—)也就是说,我不知道你说的“有适当的缓存”是什么意思。如果您给出一个您希望的输入/输出行为的确切示例,这将非常有帮助。在

除此之外,Python文档提供了相当于tee()的Python代码,研究这些代码也许可以回答您的问题:def tee(iterable, n=2):

it = iter(iterable)

deques = [collections.deque() for i in range(n)]

def gen(mydeque):

while True:

if not mydeque: # when the local deque is empty

newval = next(it) # fetch a new value and

for d in deques: # load it to all the deques

d.append(newval)

yield mydeque.popleft()

return tuple(gen(d) for d in deques)

例如,您可以看到,关于迭代器内部状态的任何信息都没有被缓存—缓存的只是传入迭代器生成的值,从调用tee()开始。每个克隆都有它自己的deque(FIFO list)传入迭代器的值,这就是所有克隆知道的传入迭代器。所以对于你真正希望的事情来说,这可能太简单了。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值