就像一個(gè)黑匣子,很多時(shí)候我們不知道python內(nèi)部是怎樣執(zhí)行代碼的,而且DEBUG的時(shí)候也沒有機(jī)器指令可以查看,非常不利于代碼優(yōu)化。但是沒關(guān)系,現(xiàn)在我們有Dis模塊來對(duì)代碼進(jìn)行性能剖析。
為什么下面第一個(gè)函數(shù)比第二個(gè)函數(shù)耗得內(nèi)存更少?
如果你沒有厲害到那個(gè)程度是很難想出來的,但是我們使用Dis模塊卻能很容易找到答案:
結(jié)果:
Dis的結(jié)果其實(shí)很容易閱讀:
第一列:對(duì)應(yīng)的源代碼行數(shù)。
第二列:對(duì)應(yīng)的內(nèi)存字節(jié)碼的索引位置。
第三列:內(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ù)低。
-
模塊
+關(guān)注
關(guān)注
7文章
2785瀏覽量
50018 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4377瀏覽量
64553 -
代碼
+關(guān)注
關(guān)注
30文章
4894瀏覽量
70449 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86458
發(fā)布評(píng)論請(qǐng)先 登錄
學(xué)python有哪些方向?
探究python字節(jié)碼
PIC16LF1939的代碼性能分析
三種提高Python代碼性能的簡(jiǎn)便方法
python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例

Python代碼的性能分析的命令合集
Python 代碼加速運(yùn)行的的小技巧
python包、模塊和庫是什么
怎么用模塊來觀察代碼性能表現(xiàn)

Dis模塊的使用

評(píng)論