python生成器的效率

longqidong發表於2014-08-20
今天在做一個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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章