那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Dis模塊的使用

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

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

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

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

1.為什么下面第一個(gè)函數(shù)比第二個(gè)函數(shù)耗得內(nèi)存更少?

圖片

圖片

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

圖片

結(jié)果:

圖片

Dis的結(jié)果其實(shí)很容易閱讀:

第一列: 對應(yīng)的源代碼行數(shù)。
第二列: 對應(yīng)的內(nèi)存字節(jié)碼的索引位置。
在第一列和第二列之間的 >> 號表示跳轉(zhuǎn)的目標(biāo)
第三列: 內(nèi)部機(jī)器代碼的操作。
第四列: 指令參數(shù)
第五列: 實(shí)際參數(shù)。

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

而且,在第一列和第二列之間的 >> 號表示跳轉(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中,whil****e 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 針對 Python 2 做了非常多的替換,這也是為什么它不兼容 Python 2 的原因之一,差別太大了。因此,建議各位初學(xué)者直接上手 Python 3 進(jìn)行學(xué)習(xí),而非 Python 2.

希望以上兩個(gè)Dis模塊的使用例子能給大家?guī)硪稽c(diǎn)靈感,分析一段Python代碼的深層次性能問題雖然比較費(fèi)時(shí)費(fèi)力,但是一旦你分析到了深層次的性能原因,將能累積不少深層次的技術(shù)上的知識,寫出更漂亮的代碼。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2735

    瀏覽量

    47750
  • DIS
    DIS
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    16479
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    940

    瀏覽量

    28427
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85040
收藏 人收藏

    評論

    相關(guān)推薦

    OPA548 DIS是高阻態(tài)還是什么狀態(tài)?

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

    請問OPA695 DIS要怎么接?

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

    探究python字節(jié)碼

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

    無法閃現(xiàn)開發(fā)SPC560B-Dis

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

    DIS仿真系統(tǒng)中的計(jì)算機(jī)生成兵力研究

    在分析DIS 仿真系統(tǒng)框架的基礎(chǔ)上,討論了仿真系統(tǒng)中的進(jìn)攻方CGF 系統(tǒng)的實(shí)體動(dòng)態(tài)模型、自治行為產(chǎn)生和操作員控制,最后說明了仿真系統(tǒng)中的時(shí)空一致性問題。對研究基于DIS 的計(jì)
    發(fā)表于 03-29 14:37 ?15次下載

    ARM設(shè)計(jì)的DIS采集系統(tǒng)方案

    ARM設(shè)計(jì)的DIS采集系統(tǒng)方案 數(shù)字化信息系統(tǒng)實(shí)驗(yàn)室(Digital Information System,DIS)是新一代的中小學(xué)實(shí)驗(yàn)教學(xué)系統(tǒng),是先進(jìn)的數(shù)字技術(shù)應(yīng)用到
    發(fā)表于 04-28 10:05 ?1388次閱讀
    ARM設(shè)計(jì)的<b class='flag-5'>DIS</b>采集系統(tǒng)方案

    基于ARM的DIS采集系統(tǒng)設(shè)計(jì)

    2006年,教育部將DIS納入了中小學(xué)實(shí)驗(yàn)儀器裝備標(biāo)準(zhǔn),建議有條件的學(xué)校配備。目前,國內(nèi)已有多家企業(yè)有相應(yīng)的產(chǎn)品,但大多不夠成熟。而國外的類似產(chǎn)品雖然較為成熟,但價(jià)格偏
    發(fā)表于 07-21 15:46 ?1104次閱讀
    基于ARM的<b class='flag-5'>DIS</b>采集系統(tǒng)設(shè)計(jì)

    LA46 DIS 09911-1_0126聯(lián)想B460 電路圖

    LA46 DIS 09911-1_0126聯(lián)想B460 電路圖
    發(fā)表于 02-14 16:10 ?87次下載

    基于SPC582B-DIS微控制器的參考設(shè)計(jì)

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

    彗星DIS SI1構(gòu)建原理圖下載

    彗星DIS SI1構(gòu)建原理圖下載
    發(fā)表于 07-16 09:58 ?0次下載

    基于SPC560B-DIS微控制器的參考設(shè)計(jì)

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

    基于SPC560D-DIS微控制器的參考設(shè)計(jì)

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

    Dis預(yù)測意外情況

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

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

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

    python 使用Dis模塊進(jìn)行代碼性能剖析

    就像一個(gè)黑匣子,很多時(shí)候我們不知道python內(nèi)部是怎樣執(zhí)行代碼的,而且DEBUG的時(shí)候也沒有機(jī)器指令可以查看,非常不利于代碼優(yōu)化。但是沒關(guān)系,現(xiàn)在我們有Dis模塊來對代碼進(jìn)行性能剖析。 為什么下面
    的頭像 發(fā)表于 11-03 15:39 ?624次閱讀
    python 使用<b class='flag-5'>Dis</b><b class='flag-5'>模塊</b>進(jìn)行代碼性能剖析
    打百家乐官网庄闲的技巧| 大发888pt| 百家乐官网网络真人斗地主| 大发888娱乐城游戏下载| 网页百家乐官网的玩法技巧和规则 | 在线百家乐娱乐| 黎平县| 百家乐看| 百家乐官网规律打法| 易发| 游戏机百家乐庄闲| 百家乐官网小钱赢钱| 大发888娱乐城送白菜| 黄金城百家乐官网手机版| 玛多县| 百家乐软件代理打| 百家乐官网又称什么| 传奇百家乐的玩法技巧和规则 | 网上棋牌游戏| 最好的百家乐投注| 圣安娜百家乐官网代理| 威尼斯人娱乐城--老品牌值得您信赖| 招远市| 大发888官方下载网站| 百家乐信誉平台开户| 壹贰博百家乐官网娱乐城| 棋牌游戏源码| 单机百家乐的玩法技巧和规则 | 洛克百家乐官网的玩法技巧和规则 | 圣安娜百家乐代理| 澳门赌百家乐官网的玩法技巧和规则| 百家乐官网评级导航| 大发888中文官网| 678百家乐博彩娱乐场| 百家乐官网平注法到656| 大发888娱乐城维护| 临汾玩百家乐的人在那里找| 百家乐官网赌博技巧网| 时时博在线娱乐城| 大发888大发下载| 百家乐庄闲局部失|