精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Dis模塊的使用

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-02 15:27 ? 次閱讀

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

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

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

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

圖片

圖片

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

圖片

結果:

圖片

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

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

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

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

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

while 1:
    pass

while True:
    pass

可以通過在命令中使用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 3 針對 Python 2 做了非常多的替換,這也是為什么它不兼容 Python 2 的原因之一,差別太大了。因此,建議各位初學者直接上手 Python 3 進行學習,而非 Python 2.

希望以上兩個Dis模塊的使用例子能給大家帶來一點靈感,分析一段Python代碼的深層次性能問題雖然比較費時費力,但是一旦你分析到了深層次的性能原因,將能累積不少深層次的技術上的知識,寫出更漂亮的代碼。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2671

    瀏覽量

    47341
  • DIS
    DIS
    +關注

    關注

    0

    文章

    17

    瀏覽量

    16452
  • 虛擬機
    +關注

    關注

    1

    文章

    908

    瀏覽量

    28094
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84453
收藏 人收藏

    評論

    相關推薦

    OPA548 DIS是高阻態還是什么狀態?

    如圖:支持利用E/S腳的EN/DIS功能, 想知道 1.DIS是高阻態還是什么狀態, 2.1. 從有輸輸出到輸入DIS電平,到輸出延時時間是多少 2.2.從DIS無輸出到輸入EN電
    發表于 09-02 06:54

    請問OPA695 DIS要怎么接?

    請問OPA695DIS要怎么接?
    發表于 09-06 07:57

    探究python字節碼

    玩這個,Python標準庫中的dis模塊就非常有用了; dis模塊為Python字節碼提供了一個“反匯編程序”,從而可以輕松獲取人為可讀的版本并查找各種字節碼指令。
    發表于 05-22 15:48

    無法閃現開發SPC560B-Dis

    大家好,感謝您的時間和幫助。我正在使用SPC560B-DIS開發板和spc5studio IDE。突然當我試圖閃存開發板時,我在日志中遇到錯誤說:錯誤,Core :: PpcJtagTargIntf
    發表于 01-28 10:36

    DIS仿真系統中的計算機生成兵力研究

    在分析DIS 仿真系統框架的基礎上,討論了仿真系統中的進攻方CGF 系統的實體動態模型、自治行為產生和操作員控制,最后說明了仿真系統中的時空一致性問題。對研究基于DIS 的計
    發表于 03-29 14:37 ?15次下載

    ARM設計的DIS采集系統方案

    ARM設計的DIS采集系統方案 數字化信息系統實驗室(Digital Information System,DIS)是新一代的中小學實驗教學系統,是先進的數字技術應用到
    發表于 04-28 10:05 ?1346次閱讀
    ARM設計的<b class='flag-5'>DIS</b>采集系統方案

    基于ARM的DIS采集系統設計

    2006年,教育部將DIS納入了中小學實驗儀器裝備標準,建議有條件的學校配備。目前,國內已有多家企業有相應的產品,但大多不夠成熟。而國外的類似產品雖然較為成熟,但價格偏
    發表于 07-21 15:46 ?1070次閱讀
    基于ARM的<b class='flag-5'>DIS</b>采集系統設計

    LA46 DIS 09911-1_0126聯想B460 電路圖

    LA46 DIS 09911-1_0126聯想B460 電路圖
    發表于 02-14 16:10 ?87次下載

    基于SPC582B-DIS微控制器的參考設計

    View the reference design for SPC582B-DIS. http://www.nxhydt.com/soft/ has thousands of reference designs to help bring your project to life.
    發表于 07-09 16:43 ?2次下載
    基于SPC582B-<b class='flag-5'>DIS</b>微控制器的參考設計

    彗星DIS SI1構建原理圖下載

    彗星DIS SI1構建原理圖下載
    發表于 07-16 09:58 ?0次下載

    基于SPC560B-DIS微控制器的參考設計

    View the reference design for SPC560B-DIS. http://www.nxhydt.com/soft/ has thousands of reference designs to help bring your project to life.
    發表于 08-31 18:14 ?2次下載
    基于SPC560B-<b class='flag-5'>DIS</b>微控制器的參考設計

    基于SPC560D-DIS微控制器的參考設計

    View the reference design for SPC560D-DIS. http://www.nxhydt.com/soft/ has thousands of reference designs to help bring your project to life.
    發表于 08-31 18:16 ?3次下載
    基于SPC560D-<b class='flag-5'>DIS</b>微控制器的參考設計

    Dis預測意外情況

    ./oschina_soft/dis.zip
    發表于 06-13 11:31 ?4次下載
    <b class='flag-5'>Dis</b>預測意外情況

    ZIWBO0/ZIWB1/ZIWEO DIS M/B示意圖文件

    ZIWBO0/ZIWB1/ZIWEO DIS M/B示意圖文件
    發表于 04-17 10:52 ?1次下載

    python 使用Dis模塊進行代碼性能剖析

    就像一個黑匣子,很多時候我們不知道python內部是怎樣執行代碼的,而且DEBUG的時候也沒有機器指令可以查看,非常不利于代碼優化。但是沒關系,現在我們有Dis模塊來對代碼進行性能剖析。 為什么下面
    的頭像 發表于 11-03 15:39 ?543次閱讀
    python 使用<b class='flag-5'>Dis</b><b class='flag-5'>模塊</b>進行代碼性能剖析