python代碼性能優(yōu)化技巧

python代碼性能優(yōu)化技巧

ID:8979605

大?。?07.50 KB

頁數(shù):18頁

時(shí)間:2018-04-13

python代碼性能優(yōu)化技巧_第1頁
python代碼性能優(yōu)化技巧_第2頁
python代碼性能優(yōu)化技巧_第3頁
python代碼性能優(yōu)化技巧_第4頁
python代碼性能優(yōu)化技巧_第5頁
資源描述:

《python代碼性能優(yōu)化技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、代碼優(yōu)化能夠讓程序運(yùn)行更快,它是在不改變程序運(yùn)行結(jié)果的情況下使得程序的運(yùn)行效率更高,根據(jù)80/20原則,實(shí)現(xiàn)程序的重構(gòu)、優(yōu)化、擴(kuò)展以及文檔相關(guān)的事情通常需要消耗80%的工作量。優(yōu)化通常包含兩方面的內(nèi)容:減小代碼的體積,提高代碼的運(yùn)行效率。改進(jìn)算法,選擇合適的數(shù)據(jù)結(jié)構(gòu)一個(gè)良好的算法能夠?qū)π阅芷鸬疥P(guān)鍵作用,因此性能改進(jìn)的首要點(diǎn)是對(duì)算法的改進(jìn)。在算法的時(shí)間復(fù)雜度排序上依次是:O(1)->O(lgn)->O(nlgn)->O(n^2)->O(n^3)->O(n^k)->O(k^n)->O(n!)因此如果能夠在時(shí)間復(fù)雜度

2、上對(duì)算法進(jìn)行一定的改進(jìn),對(duì)性能的提高不言而喻。但對(duì)具體算法的改進(jìn)不屬于本文討論的范圍,讀者可以自行參考這方面資料。下面的內(nèi)容將集中討論數(shù)據(jù)結(jié)構(gòu)的選擇?!褡值?dictionary)與列表(list)Python字典中使用了hashtable,因此查找操作的復(fù)雜度為O(1),而list實(shí)際是個(gè)數(shù)組,在list中,查找需要遍歷整個(gè)list,其復(fù)雜度為O(n),因此對(duì)成員的查找訪問等操作字典要比list更快。清單1.代碼dict.pyfromtimeimporttimet=time()list=['a','b','i

3、s','python','jason','hello','hill','with','phone','test','dfdf','apple','pddf','ind','basic','none','baecr','var','bana','dd','wrd']#list=dict.fromkeys(list,True)printlistfilter=[]foriinrange(1000000):forfindin['is','hat','new','list','old','.']:iffindnotinl

4、ist:filter.append(find)print"totalruntime:"printtime()-t??上述代碼運(yùn)行大概需要16.09seconds。如果去掉行#list=dict.fromkeys(list,True)的注釋,將list轉(zhuǎn)換為字典之后再運(yùn)行,時(shí)間大約為8.375seconds,效率大概提高了一半。因此在需要多數(shù)據(jù)成員進(jìn)行頻繁的查找或者訪問的時(shí)候,使用dict而不是list是一個(gè)較好的選擇?!窦?set)與列表(list)set的union,intersection,differe

5、nce操作要比list的迭代要快。因此如果涉及到求list交集,http://qun.81nanchang.cn并集或者差的問題可以轉(zhuǎn)換為set來操作。清單2.求list的交集:?fromtimeimporttimet=time()lista=[1,2,3,4,5,6,7,8,9,13,34,53,42,44]listb=[2,4,6,9,23]intersection=[]foriinrange(1000000):forainlista:forbinlistb:ifa==b:intersection.appe

6、nd(a)print"totalruntime:"printtime()-t?上述程序的運(yùn)行時(shí)間大概為:totalruntime:38.4070000648清單3.使用set求交集fromtimeimporttimet=time()lista=[1,2,3,4,5,6,7,8,9,13,34,53,42,44]listb=[2,4,6,9,23]intersection=[]foriinrange(1000000):list(set(lista)&set(listb))print"totalruntime:"p

7、rinttime()-t??改為set后程序的運(yùn)行時(shí)間縮減為8.75,提高了4倍多,運(yùn)行時(shí)間大大縮短。讀者可以自行使用表1http://beizhu.ttplay8.cn其他的操作進(jìn)行測(cè)試。表1.set常見用法語法??????????????????????操作?????????????說明set(list1)

8、set(list2)??????union???????????包含list1和list2所有數(shù)據(jù)的新集合set(list1)&set(list2)??????intersection?????包含li

9、st1和list2中共同元素的新集合set(list1)–set(list2)??????difference???????在list1中出現(xiàn)但不在list2中出現(xiàn)的元素的集合對(duì)循環(huán)的優(yōu)化對(duì)循環(huán)的優(yōu)化所遵循的原則是盡量減少循環(huán)過程中的計(jì)算量,有多重循環(huán)的盡量將內(nèi)層的計(jì)算提到上一層。下面通過實(shí)例來對(duì)比循環(huán)優(yōu)化后所帶來的性能的提高。程序清單4中,如果不進(jìn)行循環(huán)優(yōu)化,其大概的運(yùn)行時(shí)間約為13

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。