使用迭代器可以提供什么(如果有的话)性能优势.它似乎是解决许多问题的"正确方法",但是它是否会创建更快/更具记忆意识的代码?我在Python中专门思考,但不限制答案.
在python邮件列表上实际上有一个非常好的邮件: Iterators vs Lists.它有点过时(从2003年开始),但据我所知,它仍然有效.
以下是摘要:
对于小型数据集,迭代器和基于列表的方法具有相似的性能.对于较大的数据集,迭代器可以节省时间和空间.
我将从中得出的是:如果可能的话,迭代器优先于将数据加载到列表中.但除非你有一个大的数据集,否则不要扭曲你的代码来制作一个适合列表的东西来处理迭代器.
对于Python,生成器将更快,并具有更好的内存效率.想想一个range(1000)
vs 的例子xrange(1000)
(这已经在3.0中改变了,范围现在是一个生成器).使用Range,您可以预先构建列表,但XRange只有一个生成器对象,并在需要时生成下一个项目.
在小事情上,性能差异并不大,但是一旦你开始越来越多地获得越来越大的信息,你会很快注意到它.此外,不仅需要生成然后逐步执行,您将为预先构建的项目消耗额外的内存 - 与生成器表达式一样,一次只能生成1个项目.
迭代器的主要好处不是性能.根据我的经验,最高性能的解决方案是创建一个嵌入您选择的数据结构的算法.迭代器的好处是它们允许您解耦数据和算法,因此可以概括和重用两者.如果这也可以在没有(或很少)性能下降的情况下完成,那么它就是净增益.
我最喜欢的迭代器用法示例可以在C++ 标准模板库中找到.它通过在不牺牲性能的情况下干净地分离容器和算法来设法展示抽象的力量和美感.理解这种设计对我对代码的思考方式产生了深远的影响.