提高Python程序執(zhí)行性能的7個(gè)習(xí)慣
人生苦短,我用Python”,這句話很精髓地體現(xiàn)了Python這門編程語(yǔ)言的特點(diǎn),就是開發(fā)高效。Python的語(yǔ)法表現(xiàn)力很強(qiáng)、很靈活,同時(shí)擁有大量?jī)?yōu)秀的第三方庫(kù)。
python
不過(guò)任何事物都不可能是完美的,很多人詬病Python的執(zhí)行性能低,沒(méi)有C、Java等語(yǔ)句強(qiáng)。
其實(shí)關(guān)于這個(gè)問(wèn)題,我個(gè)人認(rèn)為大可不必過(guò)于糾結(jié),沒(méi)有完美的工具,只有適合的場(chǎng)景。所以,選擇一門語(yǔ)句時(shí),要看是用于什么地方。大多數(shù)情況下,Python還是非常適合的。
但不同的編碼習(xí)慣,還是會(huì)影響Python的執(zhí)行效率的,CPU的執(zhí)行和內(nèi)存的占用??偨Y(jié)了7個(gè)日常的習(xí)慣,可以提高Python程序執(zhí)行性能。
1使用局部變量
盡量使用局部變量替代全局變量,這樣利于提升性能和節(jié)約內(nèi)存。
例如:
ls=os.linesep
原因:
搜索本地變量速度更快
使用短的命名替代長(zhǎng)的模塊命名,更便于閱讀
2減少一些函數(shù)的調(diào)用
判斷對(duì)象類型時(shí),較好使用isinstance(),而不是type(),這樣性能更好。
在一個(gè)循環(huán)里不要重復(fù)執(zhí)行一個(gè)判斷條件函數(shù),例如:
whilei>len(a):
pass
#len()浪費(fèi)不必的CPU計(jì)算資源
使用fromXimportY,替代importX;X.Y,可以減少查找模塊次數(shù)。
3使用映射替代條件判斷
映射的查找速度是遠(yuǎn)高于條件語(yǔ)句的,例如:
#判斷的方式
ifa==1:
b==10
elifa==2:
b==20
#映射的方式
d={1:10,2:20}
b=d[a]
>>>點(diǎn)擊咨詢python編程基礎(chǔ)課程
4直接迭代序列的元素
序列類型包括:str、list、tuple,直接迭代序列元素幣迭代元素索引更快。
a=[1,2,3]
#直接迭代的方式
foritemina:
printitem
#通過(guò)索引的方式
foriinrange(len(a)):
printa[i]
5生成器替代列表推導(dǎo)
列表推導(dǎo)會(huì)產(chǎn)生一個(gè)空的list,而生成器是延時(shí)產(chǎn)生數(shù)據(jù)的,對(duì)內(nèi)存更友好。
#列表推導(dǎo)
l=sum([len(word)forlineinfforwordinline.split()])
#生成器
l=sum(len(word)forlineinfforwordinline.split())
6先編譯后執(zhí)行
如果需要eval()和exec()執(zhí)行code,較好先編譯成bytecode,所以使用compile()編譯替代str。
其中正則表達(dá)式也先編譯,再匹配,例如:
re.complie()
7模塊程序運(yùn)行習(xí)慣
在模塊里要執(zhí)行一些測(cè)試的時(shí)候,要注明主函數(shù),如:
defmain():
pass
if__name__=='__main__':
main()
這樣避免引用時(shí),導(dǎo)致不必要的執(zhí)行。
掃碼立享AQF超值體驗(yàn)課喲!
課二維碼(10).png)




