時(shí)間:03-20
欄目:SEO優(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=[]

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ì)算發展成就。因此可以利用該特性在一定程度上提高程序效率成就。
猜您喜歡
一洋seo淘寶解密企業(yè)seo站 下載百度seo關(guān)鍵詞排名價(jià)格是多少錢typecho文章seo淘寶客seo教程視頻網(wǎng)站seo分析表seo服務(wù)公司瓶裝14云速捷杰出深圳品牌宣傳知名樂云seoseo快排掉的快學(xué)seo可以找哪些工作室seo資訊 seoqx.comseo目標(biāo)層次分為北京seo都選樂云seo專家標(biāo)簽與seo成都廣告發(fā)布甄選樂云seo赤水網(wǎng)站seo優(yōu)化價(jià)格質(zhì)量好seo步驟秒抓程序seo鐘祥420seo-bk1066SEO英文翻譯中中文百度seo優(yōu)化技巧seo崗位要求seo 十萬個(gè)為什么網(wǎng)站地圖對(duì)seo珠海seo優(yōu)化公司廣州網(wǎng)站建設(shè)seo網(wǎng)上seo課程快排seo優(yōu)化經(jīng)seo王淘seo天拓seoseo搜索優(yōu)化是什么意思seo團(tuán)隊(duì)管理系統(tǒng)逆浴核接座分桃敘燭森慮側(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)分享給您的好友非常重要,謝謝!
- 1做搜狗seo_SEO怎么學(xué)
- 2新站不被搜索引擎收錄的5個(gè)原因你有這樣做嗎
- 3231.SEO優(yōu)化過程中的客戶和數(shù)據(jù)分析
- 4SEO與網(wǎng)絡(luò)營(yíng)銷之間的絕對(duì)關(guān)系!
- 5組建SEO團(tuán)隊(duì)需要哪些人員
- 6網(wǎng)站SEO優(yōu)化_口碑營(yíng)銷啟示錄打造好口碑只需記住這句話_SEO優(yōu)化SEO推廣SEO服務(wù)天線貓_
- 7企業(yè)想優(yōu)化多個(gè)SEO關(guān)鍵詞怎么做呢
- 8SEO優(yōu)化價(jià)格在2020年如何確定
- 91973.SEO之關(guān)鍵詞策略分析
- 10搜索引擎SEO優(yōu)化要怎樣入門