我知道生成器比迭代器快。我还了解生成器可以使用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
这只是结果的一个例子:
^{pr2}$因为它使用for
循环语法,所以我不明白它怎么比迭代器快。此生成器使用迭代器,因为“for”循环是使用迭代器实现的。如果你对这些进行计时,生成器的速度会一直更快。当生成器使用迭代器时,为什么会这样?在
谢谢。在
在您的代码中,
myIter(n)
实际上可以循环100次。在另一方面,
myGen(n)
只需构建生成器就可以了。不算100。你所做的只是计时构建对象所需的时间,而你的计时方式并不可靠。如果我们使用timeit
(这里使用IPython使事情更简单):我们看到
^{pr2}$myGen(n)
时间与n
无关,因为它什么都不做。实际上,我们可以看到您的代码从未以其他方式执行过:如果我们修复了这个错误,然后尝试一种快速的方法来消耗生成器,我们得到的结果是
而且发电机版本的速度较慢,这是经常发生的情况。在
相关问题 更多 >
编程相关推荐