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




