【发布时间】:2018-02-15 05:49:09
【问题描述】:
这是一个例子
>>> from timeit import timeit
>>> print(timeit('[y for y in range(100)]', number=100000))
0.7025867114395824
>>> print(timeit('(y for y in range(100))', number=100000))
0.09295392291478244
>>> print(timeit('set([y for y in range(100)])', number=100000))
1.0864544935180334
>>> print(timeit('set((y for y in range(100)))', number=100000))
1.1277489876506621
这很混乱。生成器需要更少的时间来创建(这是可以理解的),但是为什么将生成器转换为集合比在应该(至少据我所知)转换列表时要慢。
【问题讨论】:
-
(y for y in range(100))除了创建一个生成器对象之外什么也不做。没有进行任何迭代,因此与发生的其他事情相比,这确实是一个毫无价值的测试。 -
生成器的优势在于内存消耗和提前终止的可能性;迭代整个生成器不会比迭代整个相应的列表理解更快。
标签: python performance python-3.x list-comprehension generator-expression