python生成器的效率

今天在做一个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就完成了。可想而知,效率差别多大

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22418990/viewspace-1254964/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22418990/viewspace-1254964/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值