這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行python代碼深層次性能分析Dis模塊,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
富錦ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
Python代碼在執(zhí)行的時(shí)候,會(huì)被編譯為Python字節(jié)碼,再由Python虛擬機(jī)執(zhí)行Python字節(jié)碼。有時(shí)候就我們執(zhí)行python文件的時(shí)候會(huì)生成一個(gè)pyc文件,這個(gè)pyc文件即用于存儲(chǔ)Python字節(jié)碼指令,而這些字節(jié)碼是一種類似于匯編指令的中間語言,但是每個(gè)字節(jié)碼對(duì)應(yīng)的不是機(jī)器指令,而是一段C代碼。
而Dis模塊,就是用于查看這些字節(jié)碼的運(yùn)行軌跡,因此我們可以用Dis模塊判斷兩個(gè)函數(shù)的內(nèi)存占用誰會(huì)更大,誰會(huì)更消耗CPU性能,不僅如此,通過指令,我們還可以知道Python中一些內(nèi)置函數(shù)、變量的取值過程、運(yùn)行邏輯,對(duì)于我們優(yōu)化代碼很有幫助。
下面將通過兩個(gè)例子,來介紹Dis模塊的使用。
1.為什么下面第一個(gè)函數(shù)比第二個(gè)函數(shù)耗得內(nèi)存更少?
一般人是比較難直接看出來的,但是我們使用Dis模塊卻能很容易找到答案:
結(jié)果:
Dis的結(jié)果其實(shí)很容易閱讀:
第一列:對(duì)應(yīng)的源代碼行數(shù)。
第二列:對(duì)應(yīng)的內(nèi)存字節(jié)碼的索引位置。
在第一列和第二列之間的 >> 號(hào)表示跳轉(zhuǎn)的目標(biāo)
第三列:內(nèi)部機(jī)器代碼的操作。
第四列:指令參數(shù)。
第五列:實(shí)際參數(shù)。
兩個(gè)函數(shù)的dis分析用*號(hào)隔開了,大家可以清晰地看到兩個(gè)函數(shù)之間的語句區(qū)別。第二個(gè)函數(shù)的字節(jié)碼索引最大到了30,而第一個(gè)函數(shù)的字節(jié)碼索引最大僅到了22,因此,第一個(gè)函數(shù)耗得內(nèi)存比第二個(gè)函數(shù)少。
而且,在第一列和第二列之間的 >> 號(hào)表示跳轉(zhuǎn)的目標(biāo),大家可以看第二個(gè)函數(shù)第四列的 18,表示其跳轉(zhuǎn)到了索引為18的指令,也就是ROT_TWO。第二個(gè)函數(shù)的跳轉(zhuǎn)也比第一個(gè)函數(shù)多,這也可能導(dǎo)致其在某種特殊情況下的效率可能會(huì)比第一個(gè)函數(shù)低。
2.為什么Python2中,while True 比 while 1慢?
while 1: pass while True: pass
可以通過在命令中使用dis進(jìn)行分析:
可以看到,while 1 在第二行是直接JUMP_ABSOLUTE,因此相比于While True 少了LOAD_NAME 和 POP_JUMP_IF_FALSE。這是因?yàn)門rue在Python2中不是一個(gè)關(guān)鍵字,而是一個(gè)內(nèi)置變量,因此每次Python都會(huì)用LOAD_NAME去檢查(POP_JUMP_IF_FALSE)True的值。這就是為什么While True 比while 1慢的原因。
到了Python3,True變成了關(guān)鍵字,就沒有這個(gè)問題了:
Python 3 針對(duì) Python 2 做了非常多的替換,這也是為什么它不兼容 Python 2 的原因之一,差別太大了。因此,建議各位初學(xué)者直接上手 Python 3 進(jìn)行學(xué)習(xí),而非 Python 2.
關(guān)于如何進(jìn)行python代碼深層次性能分析Dis模塊就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。