【发布时间】:2015-10-24 08:18:41
【问题描述】:
我知道生成器比迭代器快。我也明白生成器可以使用for 循环语法来实现。例如:
import time
startT = time.time()
def myGen(n):
for i in range(n):
yield x
def myIter(n):
for i in range(n):
pass
def main():
n=100
startT=time.time()
myIter(n)
print 'myIter took ', time.time() - startT
startT=time.time()
myGen(n)
print 'myGen(n) took ', time.time() - startT
这只是结果的一个例子:
myIter took 0.09234782
myGen(n) took 0.017847266
由于它使用for 循环语法,所以我不明白它比迭代器快得多。此生成器使用迭代器,因为“for”循环是使用迭代器实现的。如果您对这些进行计时,则生成器始终会更快。当生成器使用迭代器时,为什么会这样?
谢谢。
【问题讨论】:
-
“我知道生成器比迭代器快。” - 他们不是。为什么你认为他们是?生成器是一种迭代器。
-
生成器并不比迭代器快。生成器是迭代器。通常生成器函数实际上更慢,但内存效率更高。
-
不清楚你认为这比什么代码更快。你能把它包括在你的问题中吗?
-
还有
printing标准输出变量也会减慢应用程序的速度。 -
首先,您只进行了一次测试,而不是数千次。其次,
time.time()不是一个准确的计时器。第三,生成器只创建循环并进行一次迭代,而另一个函数创建循环然后遍历整个循环。