亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解python字節(jié)碼

 更新時(shí)間:2018年02月07日 11:07:25   作者:Titan0427  
本篇文章給大家總結(jié)了關(guān)于python字節(jié)碼的相關(guān)知識點(diǎn)以及知識點(diǎn)分析,對此有需要的朋友參考學(xué)習(xí)下。

Python對不可變序列進(jìn)行重復(fù)拼接操作效率會(huì)很低,因?yàn)槊看味紩?huì)生成一個(gè)新的對象,解釋器需要把原來對象中的元素先復(fù)制到新的對象里,然后再追加新的元素。

但是CPython對字符串操作進(jìn)行了優(yōu)化,因?yàn)閷ψ址?=操作實(shí)在是太普遍了。因此,初始化str時(shí)會(huì)預(yù)留出額外的可擴(kuò)展空間,從而進(jìn)行增量操作的時(shí)候不會(huì)有復(fù)制再追加的這個(gè)步驟。

通過字節(jié)碼研究一下這個(gè)過程。

>>> s_code = 'a += "b"'
>>> c = compile(s_code, '', 'exec')
>>> c.co_code
b'e\x00\x00d\x00\x007Z\x00\x00d\x01\x00S'
>>> c.co_names
('a',)
>>> c.co_consts
('b', None)

得到的字節(jié)碼是Bytes類型的。這里穿插一些Bytes類型的知識。

Bytes類型

b'e\x00\x00d\x00\x007Z\x00\x00d\x01\x00S',b表示是Bytes類型。Bytes以二進(jìn)制字節(jié)序列的形式記錄數(shù)據(jù),每一個(gè)字符就代表一個(gè)字節(jié)(8位)。比如上面的e表示二進(jìn)制0110 0101。部分ASCII碼對照表如下圖所示。

但是,不是所有的字節(jié)都是可顯示的,甚至有些字節(jié)無法對應(yīng)到ASCII碼上(因?yàn)锳SCII碼只定義了128個(gè)字符,而一個(gè)字節(jié)有256個(gè))。比如0000 0000對應(yīng)的ASCII是不可顯示的、0111 1111沒有對應(yīng)的ASCII碼。

為了表示這些無法顯示的字節(jié),就引入了\x符號,其表示后續(xù)的字符為16進(jìn)制。如,\x00表示16進(jìn)制的00,也就是二進(jìn)制的0000 0000。

至此,所有字節(jié)都可被表示。

字節(jié)碼分析

回到開始的代碼。為了顯示方便,將b'e\x00\x00d\x00\x007Z\x00\x00d\x01\x00S'轉(zhuǎn)為16進(jìn)制來顯示。

>>> c.co_code.hex()
'650000640000375a000064010053'

通過opcode.opname函數(shù)可以得到操作碼所對應(yīng)的操作指令

>>> import opcode
>>> opcode.opname[0x65]
'LOAD_NAME'

因此,完整的字節(jié)碼可以解釋為(TOS即top-of-stack,棧頂元素):

字節(jié):位置,功能
65:0,LOAD_NAME
0000:參數(shù),將co_names[0]的值,即a的值,壓入棧
64:3,LOAD_CONST
0000:參數(shù),將co_consts[0],即'b',壓入棧
37:6,INPLACE_ADD,TOS = TOS1 + TOS
5a:7,STORE_NAME
0000:參數(shù),co_names[0]=TOS,即將棧頂賦值給a
64:10,LOAD_CONST
0100:參數(shù)
53:13,RETURN_VALUE,Returns with TOS to the caller of the function

實(shí)際上借助dis函數(shù)可以直接獲得可讀的字節(jié)碼:

>>> import dis
>>> dis.dis(s_code)
 1      0 LOAD_NAME        0 (a)
       3 LOAD_CONST        0 ('b')
       6 INPLACE_ADD
       7 STORE_NAME        0 (a)
       10 LOAD_CONST        1 (None)
       13 RETURN_VALUE

完整代碼:

s_code = 'a += "b"'
c = compile(s_code, '', 'exec')
c.co_code
c.co_names
c.co_consts
c.co_code.hex()
import dis
dis.dis(s_code)

非常失敗,對比了string和tuple的賦值字節(jié)碼,并沒有看出string的優(yōu)化…

以上就是本次關(guān)于python字節(jié)碼的相關(guān)知識點(diǎn),感謝你對腳本之家的支持。

相關(guān)文章

  • python實(shí)現(xiàn)requests發(fā)送/上傳多個(gè)文件的示例

    python實(shí)現(xiàn)requests發(fā)送/上傳多個(gè)文件的示例

    今天小編就為大家分享一篇python實(shí)現(xiàn)requests發(fā)送/上傳多個(gè)文件的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python編程之順序執(zhí)行與程序的主入口詳解

    Python編程之順序執(zhí)行與程序的主入口詳解

    程序從程序入口進(jìn)入,到程序執(zhí)行結(jié)束,大體是按照順序結(jié)構(gòu)執(zhí)行語句、函數(shù)或代碼塊,掌握程序的結(jié)構(gòu),有利于把握程序的主體框架,下面這篇文章主要給大家介紹了關(guān)于Python編程之順序執(zhí)行與程序的主入口的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python學(xué)習(xí)之二叉樹實(shí)現(xiàn)的示例詳解

    Python學(xué)習(xí)之二叉樹實(shí)現(xiàn)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)二叉樹的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-04-04
  • 解決tensorflow模型壓縮的問題_踩坑無數(shù),總算搞定

    解決tensorflow模型壓縮的問題_踩坑無數(shù),總算搞定

    這篇文章主要介紹了解決tensorflow模型壓縮的問題_踩坑無數(shù),總算搞定!希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python實(shí)現(xiàn)靜態(tài)服務(wù)器

    python實(shí)現(xiàn)靜態(tài)服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)靜態(tài)服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 使用Python和jieba庫生成中文詞云的示例代碼

    使用Python和jieba庫生成中文詞云的示例代碼

    在文本分析和數(shù)據(jù)可視化的領(lǐng)域中,詞云是一種展示文本數(shù)據(jù)中關(guān)鍵詞頻率的直觀方式,Python作為一種強(qiáng)大的編程語言,提供了多種庫來幫助我們生成詞云,在本文中,我們將通過一個(gè)簡單的示例,展示如何使用Python生成中文詞云,需要的朋友可以參考下
    2024-07-07
  • pandas實(shí)現(xiàn)按行選擇的示例代碼

    pandas實(shí)現(xiàn)按行選擇的示例代碼

    這篇文章主要介紹了pandas實(shí)現(xiàn)按行選擇的示例代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 使用Python抓取模板之家的CSS模板

    使用Python抓取模板之家的CSS模板

    本文給大家介紹的是使用Python抓取模板之家的CSS模板并打包成zip文件的代碼,使用的是單線程,非常簡單實(shí)用,這里分享給大家,有相同需求的小伙伴參考下吧。
    2015-03-03
  • Python中下劃線含義詳解

    Python中下劃線含義詳解

    大家好,本篇文章主要講的是Python中下劃線含義詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • python中re.findall函數(shù)實(shí)例用法

    python中re.findall函數(shù)實(shí)例用法

    在本篇文章里小編給大家整理了一篇關(guān)于python中re.findall函數(shù)實(shí)例用法相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-09-09

最新評論