【发布时间】:2010-09-19 17:39:07
【问题描述】:
这与What can you use Python generator functions for? 正好相反:python 生成器、生成器表达式和itertools 模块是我最近最喜欢的python 的一些特性。它们在设置操作链以对大量数据执行时特别有用——我经常在处理 DSV 文件时使用它们。
那么什么时候不适合使用生成器、生成器表达式或itertools 函数?
- 什么时候我应该更喜欢
zip()而不是itertools.izip(),或者 -
range()超过xrange(),或 -
[x for x in foo]超过(x for x in foo)?
显然,我们最终需要将生成器“解析”为实际数据,通常是通过创建一个列表或使用非生成器循环对其进行迭代。有时我们只需要知道长度。这不是我要问的。
我们使用生成器,因此我们不会为临时数据分配新列表到内存中。这对于大型数据集尤其有意义。它对小型数据集也有意义吗?是否存在明显的内存/cpu 权衡?
鉴于list comprehension performance vs. map() and filter() 的令人大开眼界的讨论,如果有人对此进行了一些分析,我特别感兴趣。 (alt link)
【问题讨论】:
-
我提出了一个similar question here 并做了一些分析,发现在我的特定示例中 列表对于长度为
<5的迭代更快。 -
这能回答你的问题吗? Generator Expressions vs. List Comprehension
标签: python optimization iterator generator