原则上,为迭代器编写一个包装很容易,它允许任意预见,并且对此有一些疑问(例如Using lookahead with generators)。
但是,考虑到几乎所有不平凡的文件解析都会从这种工具中获利,因此对标准库的监督似乎太明显了;真的没有 内置或标准库 机制可以偷看吗?
特别是,我通常需要窥视跨函数调用的子函数:子函数应该能够检查任意数量的即将到来的元素,而无需将其从迭代器中删除-本质上是队列数据类型,其中元素从迭代器。
在某些情况下,可以使用collections.deque
或itertools.tee
来构建变通办法。但是,出于代码可读性的考虑,它们是不利的。
答案 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