今天在做一个list处理,由于内容较多,导致迟迟不过来结果,用性能分析后,发现慢在构造list的过程中。
由于是将所有数据都记载到内存计算,导致速度太慢。后面找到解决方案是采用yield构造生成器来处理。
速率大大的提升。
下面就针对yield和不适用yield做一个性能呢个对比,采用经典的斐波拉契数列计算。
def fib(n):
result = []
a=1
b=1
result.append(a)
for i in range(n-1):
a,b = b,a+b
result.append(a)
return result
这个函数是没有采用yield构建list.
def fib1(n):
a=1
yield a
b=1
for i in range(n-1):
a,b = b,a+b
yield a
这个函数采用yield生成数列。
当n较小的时候。两者没有多大差别。
print fib(10000) 当n很大时,差别体现出来了。我这里使用10000,在我自己基本上基本就停止工作了,出不来结果
for i in fib1(10000):
print i
而采用这种方式,同样是10000 。2.4s就完成了。可想而知,效率差别多大
由于是将所有数据都记载到内存计算,导致速度太慢。后面找到解决方案是采用yield构造生成器来处理。
速率大大的提升。
下面就针对yield和不适用yield做一个性能呢个对比,采用经典的斐波拉契数列计算。
def fib(n):
result = []
a=1
b=1
result.append(a)
for i in range(n-1):
a,b = b,a+b
result.append(a)
return result
这个函数是没有采用yield构建list.
def fib1(n):
a=1
yield a
b=1
for i in range(n-1):
a,b = b,a+b
yield a
这个函数采用yield生成数列。
当n较小的时候。两者没有多大差别。
print fib(10000) 当n很大时,差别体现出来了。我这里使用10000,在我自己基本上基本就停止工作了,出不来结果
for i in fib1(10000):
print i
而采用这种方式,同样是10000 。2.4s就完成了。可想而知,效率差别多大
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22418990/viewspace-1254964/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22418990/viewspace-1254964/
185

被折叠的 条评论
为什么被折叠?



