这恰恰与 您可以使用 Python 生成器函数做什么?相反: python 生成器、生成器表达式和 itertools
模块是现在我最喜欢的 python 特性。在设置操作链以对大量数据执行时,它们尤其有用——我经常在处理 DSV 文件时使用它们。
那么,什么时候 没有是使用生成器、生成器表达式或 itertools
函数的好时机呢?
zip()
而不是 itertools.izip()
,或者range()
/xrange()
,或[x for x in foo]
对 (x for x in foo)
?显然,我们最终需要将生成器“解析”为实际的数据,通常是通过创建一个列表或使用非生成器循环对其进行迭代。有时候我们只需要知道长度。我问的不是这个。
我们使用生成器,这样就不会为中间数据分配新的列表到内存中。这对于大型数据集尤其有意义。它对于小型数据集也有意义吗?是否存在明显的内存/CPU 权衡?
我特别感兴趣的是,如果有人在这方面做了一些分析,根据大开眼界的讨论 列表内涵性能对比 map ()和 filter ()。(备用链接)