91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行python代碼深層次性能分析Dis模塊

發布時間:2021-12-04 19:29:03 來源:億速云 閱讀:188 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關如何進行python代碼深層次性能分析Dis模塊,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Python代碼在執行的時候,會被編譯為Python字節碼,再由Python虛擬機執行Python字節碼。有時候就我們執行python文件的時候會生成一個pyc文件,這個pyc文件即用于存儲Python字節碼指令,而這些字節碼是一種類似于匯編指令的中間語言,但是每個字節碼對應的不是機器指令,而是一段C代碼。

而Dis模塊,就是用于查看這些字節碼的運行軌跡,因此我們可以用Dis模塊判斷兩個函數的內存占用誰會更大,誰會更消耗CPU性能,不僅如此,通過指令,我們還可以知道Python中一些內置函數、變量的取值過程、運行邏輯,對于我們優化代碼很有幫助。

下面將通過兩個例子,來介紹Dis模塊的使用。

1.為什么下面第一個函數比第二個函數耗得內存更少?

如何進行python代碼深層次性能分析Dis模塊

如何進行python代碼深層次性能分析Dis模塊

一般人是比較難直接看出來的,但是我們使用Dis模塊卻能很容易找到答案:

如何進行python代碼深層次性能分析Dis模塊

結果:

如何進行python代碼深層次性能分析Dis模塊

Dis的結果其實很容易閱讀:

第一列:對應的源代碼行數。
第二列:對應的內存字節碼的索引位置。
在第一列和第二列之間的 >> 號表示跳轉的目標
第三列:內部機器代碼的操作。
第四列:指令參數。
第五列:實際參數。

兩個函數的dis分析用*號隔開了,大家可以清晰地看到兩個函數之間的語句區別。第二個函數的字節碼索引最大到了30,而第一個函數的字節碼索引最大僅到了22,因此,第一個函數耗得內存比第二個函數少。

而且,在第一列和第二列之間的 >> 號表示跳轉的目標,大家可以看第二個函數第四列的 18,表示其跳轉到了索引為18的指令,也就是ROT_TWO。第二個函數的跳轉也比第一個函數多,這也可能導致其在某種特殊情況下的效率可能會比第一個函數低。

2.為什么Python2中,while True 比 while 1慢?

while 1:    pass while True:    pass

可以通過在命令中使用dis進行分析:

如何進行python代碼深層次性能分析Dis模塊

可以看到,while 1 在第二行是直接JUMP_ABSOLUTE,因此相比于While True 少了LOAD_NAME 和 POP_JUMP_IF_FALSE。這是因為True在Python2中不是一個關鍵字,而是一個內置變量,因此每次Python都會用LOAD_NAME去檢查(POP_JUMP_IF_FALSE)True的值。這就是為什么While True 比while 1慢的原因。

到了Python3,True變成了關鍵字,就沒有這個問題了:

如何進行python代碼深層次性能分析Dis模塊

Python 3 針對 Python 2 做了非常多的替換,這也是為什么它不兼容 Python 2 的原因之一,差別太大了。因此,建議各位初學者直接上手 Python 3 進行學習,而非 Python 2.

關于如何進行python代碼深層次性能分析Dis模塊就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜君县| 乌恰县| 应用必备| 通化县| 台东市| 兴化市| 泰安市| 内黄县| 龙海市| 吉林省| 黔东| 汶川县| 繁昌县| 磐石市| 株洲市| 安庆市| 江口县| 五河县| 郸城县| 天镇县| 杨浦区| 镇平县| 沾益县| 葫芦岛市| 崇义县| 南澳县| 保山市| 兰州市| 抚松县| 嘉荫县| 武邑县| 太仓市| 牙克石市| 隆尧县| 北川| 台湾省| 内江市| 顺昌县| 海晏县| 徐闻县| 连山|