python是否为迭代器提供任何内置或标准库超前机制?

时间:2019-03-05 15:05:42

标签: python iterator lookahead

原则上,为迭代器编写一个包装很容易,它允许任意预见,并且对此有一些疑问(例如Using lookahead with generators)。

但是,考虑到几乎所有不平凡的文件解析都会从这种工具中获利,因此对标准库的监督似乎太明显了;真的没有 内置或标准库 机制可以偷看吗?

特别是,我通常需要窥视跨函数调用的子函数:子函数应该能够检查任意数量的即将到来的元素,而无需将其从迭代器中删除-本质上是队列数据类型,其中元素从迭代器。

在某些情况下,可以使用collections.dequeitertools.tee来构建变通办法。但是,出于代码可读性的考虑,它们是不利的。

1 个答案:

答案 0 :(得分:1)

否。


我经常发现自己使用pairwise Recipe向前看...

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

for item, peek in pairwise(iterable):
    ...

或者只是将可迭代对象转换为序列(如果还没有)并使用索引查找。

for index, item in enumerate(sequence):
    try:
        peek = sequence[index+1]
    except IndexError:
        peek = None