当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python itertools.tee用法及代码示例


用法:

itertools.tee(iterable, n=2)

从单个可迭代对象返回 n 独立迭代器。

以下 Python 代码有助于解释tee确实(虽然实际的实现更复杂并且只使用一个底层FIFO队列)。

大致相当于:

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
                try:
                    newval = next(it)   # fetch a new value and
                except StopIteration:
                    return
                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() 进行了拆分,原来的iterable 不应在其他任何地方使用;否则,iterable 可以在不通知 tee 对象的情况下前进。

tee 迭代器不是线程安全的。 A RuntimeError 可能会在同时使用由同一tee() 调用返回的迭代器时引发,即使原始iterable 是线程安全的。

此迭代工具可能需要大量辅助存储(取决于需要存储多少临时数据)。通常,如果一个迭代器在另一个迭代器启动之前使用了大部分或全部数据,则使用 list() 而不是 tee() 会更快。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 itertools.tee。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。