在Python中评估迭代器

3

我有一个惰性迭代器/生成器a,它在每次迭代时进行一些副作用,我不在乎它产生的值。最常见的评估副作用的方式是什么?当然,我可以简单地执行以下操作:

for _ in a: pass

但是它看起来相当丑陋。


1
这可能是最不错的策略,因为带有副作用的生成器本来就不是 Python 的惯用方式。 - TigerhawkT3
4
更好的解决方案是不要编写具有副作用的懒惰迭代器。 - khelwood
3
可以多提供一些上下文吗?很可能有其他更符合习惯的方法。注意:*"特别棘手的是对函数副作用调用map();正确的转换是使用普通的for循环(因为创建一个列表只会浪费资源)" * - jonrsharpe
1
如果生成器始终产生真值:all(a)。如果它始终产生假值:any(a) - jasonharper
@Ajurna:当然,或者使用filter(lambda x: None, iterator),但它仍然必须在每个项目上调用该lambda函数,并且调用Python函数不是特别快的(因为每个调用都必须创建执行帧对象),因此这会对仅需要迭代可迭代项的内容施加额外的开销。 - PM 2Ring
显示剩余5条评论
1个回答

3

我在itertools recipes章节中找到了consume()函数的配方。基本上,它建议采取以下步骤:

collections.deque(iterator, maxlen=0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接