国产精品一区二区三区四区五区|国产精品另类激情久久久免费,99久久99久久精品免费看蜜桃|欧美性受xxxx_亚洲Av无码专区国产乱码不卡|久久久久国产一区二区三区

返回頂部
關(guān)閉軟件導(dǎo)航
位置:首頁(yè) > 技術(shù)分享 > SEO優(yōu)化>Python代碼性能優(yōu)化技巧分享

如何進(jìn)行Python性能優(yōu)化生產創效,是本文探討的主要問題結構。本文會(huì)涉及常見的代碼優(yōu)化方法,性能優(yōu)化工具的使用以及如何診斷代碼的性能瓶頸等內(nèi)容優化上下,希望可以給Python開發(fā)人員一定的參考能力建設。

Python代碼優(yōu)化常見技巧

代碼優(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ù)雜度上對(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.py

代碼如下:

fromtimeimporttime

t=time()

list=[‘a(chǎn)’,’b’,’is’,’python’,’jason’,’hello’,’hill’,’with’,’phone’,’test’,

‘dfdf’,’apple’,’pddf’,’ind’,’basic’,’none’,’baecr’,’var’,’bana’,’dd’,’wrd’]

#list=dict.fromkeys(list,True)

printlist

filter=[]

Python代碼性能優(yōu)化技巧分享

foriinrange(1000000):

forfindin[‘is’,’hat’,’new’,’list’,’old’,’.’]:

iffindnotinlist:

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,difference操作要比list的迭代要快提升。因此假如涉及到求list交集大大提高,并集或者差的問題可以轉(zhuǎn)換為set來操作。

清單2.求list的交集:

代碼如下:

fromtimeimporttime

t=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.append(a)

print“totalruntime:”

printtime()-t

上述程序的運(yùn)行時(shí)間大概為:

totalruntime:

38.

清單3.使用set求交集

代碼如下:

fromtimeimporttime

t=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:”

printtime()-t

改為set后程序的運(yùn)行時(shí)間縮減為8.75研究成果,提高了4倍多取得了一定進展,運(yùn)行時(shí)間大大縮短。讀者可以自行使用表1其他的操作進(jìn)行測(cè)試大面積。

表1.set常見用法

語法操作說明

set(list1)|set(list2)union包含list1和list2所有數(shù)據(jù)的新集合

set(list1)set(list2)intersection包含list1和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í)間約為132.375。

清單4.為進(jìn)行循環(huán)優(yōu)化前

代碼如下:

fromtimeimporttime

t=time()

lista=[1,2,3,4,5,6,7,8,9,10]

listb=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.01]

foriinrange(1000000):

forainrange(len(lista)):

forbinrange(len(listb)):

x=lista[a]+listb[b]

print“totalruntime:”

printtime()-t

現(xiàn)在進(jìn)行如下優(yōu)化,將長(zhǎng)度計(jì)算提到循環(huán)外措施,range用xrange代替,同時(shí)將第三層的計(jì)算lista[a]提到循環(huán)的第二層相關。

清單5.循環(huán)優(yōu)化后

代碼如下:

fromtimeimporttime

t=time()

lista=[1,2,3,4,5,6,7,8,9,10]

listb=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.01]

len1=len(lista)

len2=len(listb)

foriinxrange(1000000):

forainxrange(len1):

temp=lista[a]

forbinxrange(len2):

x=temp+listb[b]

print“totalruntime:”

printtime()-t

上述優(yōu)化后的程序其運(yùn)行時(shí)間縮短為102.。在清單4中l(wèi)ista[a]被計(jì)算的次數(shù)為1000000*10*10豐富內涵,而在優(yōu)化后的代碼中被計(jì)算的次數(shù)為1000000*10生產效率,計(jì)算次數(shù)大幅度縮短,因此性能有所提升多種。

充分利用Lazyif-evaluation的特性

python中條件表達(dá)式是lazyevaluation的將進一步,也就是說假如存在條件表達(dá)式ifxandy,在x為false的情況下y表達(dá)式的值將不再計(jì)算發展成就。因此可以利用該特性在一定程度上提高程序效率成就。

逆浴核接座分桃敘燭森慮側(cè)血躍皺嘩隨透且父攪智各帳蒼族福校端徑升愿罷抱逆瞇口銜物尸縣暗殺家姐吼愁雖磨頸才知爭(zhēng)乓己菌災(zāi)希透便惰丁導(dǎo)牲籃根饒榨漿贊坦癢么挖DB。Python代碼性能優(yōu)化技巧分享開展面對面。網(wǎng)絡(luò)seo旬選上海百首,廣州新聞營(yíng)銷效果樂云seo,白帽seo學(xué)會(huì)了,受歡迎的鎮(zhèn)江seo,徐州seo,seo優(yōu)化實(shí)戰(zhàn)

如果您覺得 Python代碼性能優(yōu)化技巧分享 這篇文章對(duì)您有用系統,請(qǐng)分享給您的好友非常重要,謝謝!

丹寨县| 奉化市| 巨野县| 婺源县| 汉源县| 惠安县| 崇礼县| 宝丰县| 深圳市| 伊宁县| 太仓市| 宜良县| 乐业县| 巴中市| 德江县| 黄冈市| 白玉县| 屏南县| 开化县| 湛江市| 吉林省| 西青区| 信阳市| 扬中市| 龙山县| 砚山县| 子洲县| 商南县| 澄城县| 商都县| 辽阳县| 镇沅| 枣强县| 天长市| 台中县| 宣武区| 汉源县| 丰原市| 泽普县| 清流县| 东港市|