sum(xrange(9999999))
通常,如果需要执行某种操作,需要在理解和生成器表达式之间进行选择,则可以执行以下操作:
sum(a*b for a, b in zip(c, d))
就我个人而言,我认为生成器表达式(没有多余的括号1) 看起来 更好,并且由于可读性很重要-这超过了两个表达式之间的任何微性能差异。
生成器通常会因为这种情况而变得更快,因为它们避免创建中间列表(以及与之关联的内存分配)。随着内存分配和列表调整大小需要花费更多时间来处理更大的列表,随着列表变大,时序差异可能会更加明显。但是,情况并非总是如此(有很好的记录,str.join
与cpython中str.join
的生成器相比,使用List进行列表处理的速度更快,因为当获取生成器时,无论如何它都会构造列表…)。