最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解python字節(jié)碼

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

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

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

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

>>> 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ù),每一個字符就代表一個字節(jié)(8位)。比如上面的e表示二進(jìn)制0110 0101。部分ASCII碼對照表如下圖所示。

但是,不是所有的字節(jié)都是可顯示的,甚至有些字節(jié)無法對應(yīng)到ASCII碼上(因?yàn)锳SCII碼只定義了128個字符,而一個字節(jié)有256個)。比如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)ComicReaper漫畫自動爬取腳本過程解析

    基于Python實(shí)現(xiàn)ComicReaper漫畫自動爬取腳本過程解析

    這篇文章主要介紹了基于Python實(shí)現(xiàn)ComicReaper漫畫自動爬取腳本過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 基于Python實(shí)現(xiàn)文章信息統(tǒng)計(jì)的小工具

    基于Python實(shí)現(xiàn)文章信息統(tǒng)計(jì)的小工具

    及時的統(tǒng)計(jì)可以更好的去分析讀者對于內(nèi)容的需求,了解文章內(nèi)容的價值,以及從側(cè)面認(rèn)識自己在知識創(chuàng)作方面的能力。本文就來用Python制作一個文章信息統(tǒng)計(jì)的小工具?,希望對大家有所幫助
    2023-02-02
  • Python CleverCSV輕松處理CSV文件指南

    Python CleverCSV輕松處理CSV文件指南

    這篇文章主要為大家介紹了Python CleverCSV輕松處理CSV文件全面指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python數(shù)組變形的幾種實(shí)現(xiàn)方法

    Python數(shù)組變形的幾種實(shí)現(xiàn)方法

    本文主要介紹了Python數(shù)組變形的幾種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • python3環(huán)境搭建過程(利用Anaconda+pycharm)完整版

    python3環(huán)境搭建過程(利用Anaconda+pycharm)完整版

    這篇文章主要介紹了python3環(huán)境搭建過程(利用Anaconda+pycharm)完整版,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Python函數(shù)元數(shù)據(jù)實(shí)現(xiàn)為一個參數(shù)指定多個類型

    Python函數(shù)元數(shù)據(jù)實(shí)現(xiàn)為一個參數(shù)指定多個類型

    這篇文章主要介紹了Python函數(shù)元數(shù)據(jù)實(shí)現(xiàn)為一個參數(shù)指定多個類型方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python+OpenCV實(shí)現(xiàn)黑白老照片上色功能

    Python+OpenCV實(shí)現(xiàn)黑白老照片上色功能

    我們都知道,有很多經(jīng)典的老照片,受限于那個時代的技術(shù),只能以黑白的形式傳世。盡管黑白照片別有一番風(fēng)味,但是彩色照片有時候能給人更強(qiáng)的代入感。本文就來用Python和OpenCV實(shí)現(xiàn)老照片上色功能,需要的可以參考一下
    2023-02-02
  • selenium獲取元素定位的方法總結(jié)(動態(tài)獲取元素)

    selenium獲取元素定位的方法總結(jié)(動態(tài)獲取元素)

    要想操作一個元素,首先應(yīng)該識別這個元素,人有各種的特征(屬性),可以通過其特征找到人,同理,界面的某個元素會有各種的特征(屬性),可以通過這個屬性找到這對象,本文給大家介紹了python?selenium獲取元素定位的8種方法,需要的朋友可以參考下
    2024-02-02
  • Python內(nèi)建數(shù)據(jù)結(jié)構(gòu)詳解

    Python內(nèi)建數(shù)據(jù)結(jié)構(gòu)詳解

    本文給大家匯總介紹了Python中的5種內(nèi)建數(shù)據(jù)結(jié)構(gòu)以及操作示例,非常的詳細(xì),有需要的小伙伴可以參考下。
    2016-02-02
  • Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript

    Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript

    爬蟲的開發(fā)過程中,往往需要對JS進(jìn)行模擬,簡單或者通用的還可以在Python中模擬或者找到對應(yīng)的第三方庫,但是復(fù)雜的就可能不好實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論

南平市| 泰州市| 甘孜县| 荥阳市| 玉田县| 武鸣县| 邹平县| 云梦县| 兴仁县| 左贡县| 旬阳县| 那曲县| 洞口县| 阜城县| 孝感市| 沙洋县| 平度市| 南岸区| 舞钢市| 道孚县| 游戏| 东乌珠穆沁旗| 宜都市| 明星| 特克斯县| 信宜市| 大庆市| 沭阳县| 林口县| 榆树市| 灵宝市| 雷山县| 莱州市| 龙岩市| 方城县| 河北区| 冕宁县| 游戏| 自治县| 资阳市| 阿城市|