国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

有關Python2.x版本下的dis模塊的使用

zeyu / 3532人閱讀

摘要:有關版本下的模塊的使用事情源于昨天看書看到一個有意思的部分,就是在元組里面的元素如果存在可變的對象,比如里面的列表,類似下面這種形式那么如果我執行會發生什么,首先給我的感覺是這個會報錯吧,這個是顯而易見的,但是能否添加進去呢哈哈,突然覺得有

有關Python2.x版本下的dis模塊的使用

  事情源于昨天看書看到一個有意思的部分,就是在Python元組里面的元素如果存在可變的對象,比如Python里面的列表,類似下面這種形式:

t = (1, 2, [3, 4])

  那么如果我執行t[2] += [5, 6]會發生什么,首先給我的感覺是這個會報錯吧,這個是顯而易見的,但是5能否添加進去呢?哈哈,突然覺得有點意思了,然后答案就是:

t變成(1, 2, [3, 4, 5, 6])
因為tuple不支持對它的賦值,所以會拋出TypeError異常

  具體的報錯信息可以在交互式環境中自行測試一下
  這個時候我們可以使用Python的dis模塊來反編譯一下,看看操作的字節碼,如下所示:

In [14]: dis.dis(compile("t[2]+=[5, 6]", " ", "single"))
  1           0 LOAD_NAME                0 (t)
              3 LOAD_CONST               0 (2)
              6 DUP_TOPX                 2
              9 BINARY_SUBSCR
             10 LOAD_CONST               1 (5)
             13 LOAD_CONST               2 (6)
             16 BUILD_LIST               2
             19 INPLACE_ADD
             20 ROT_THREE
             21 STORE_SUBSCR
             22 LOAD_CONST               3 (None)
             25 RETURN_VALUE

  因為我使用的是Python2的版本,所以在使用dis.dis的時候,我們需要先將代碼編譯一下,即使用compile方法,這里需要注意的是第三個參數,第三個參數有三個選項,"single"、"eval"、"exec",具體的可以help查看一下,下面我們來說一下上面字節碼的關鍵行的解釋:

BINARY_SUBSCR 表示將t[2]存入棧頂TOS
INPLACE_ADD 表示計算 TOS+[5, 6],這一步是可以完成的,因為TOS指向的是一個可變對象,也就是[3, 4]這個列表
STORE_SUBSCR 這一步失敗,這是因為t是一個元組,是不可變的,對其元素進行賦值是不被允許的

  所以我的建議是:

不要把可變對象放入元組里面

增量賦值不是一個原子操作,像上面的那樣,雖然拋出錯誤,但是還是完成了操作

了解Python代碼背后的運行機制很有幫助

不建議這樣,雖然我們可以使用t[2].extend([5, 6])來完成操作,但是我們仍然不建議這樣做,不要將可變對象放入元組中。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41339.html

相關文章

  • 流暢python

    摘要:流暢的中有很多奇技淫巧,整本書都在強調如何最大限度地利用標準庫。常見的扁平序列包括,,等。數組支持所有跟可變序列有關的操作,包括和。和用于指定列表的區間,默認是使用整個列表。但是元組的賦值不被允許,當異發生時 流暢的python中有很多奇技淫巧,整本書都在強調如何最大限度地利用Python 標準庫。介紹了很多python的不常用的數據類型、操作、庫等,對于入門python后想要提升對p...

    Alan 評論0 收藏0
  • Python協程(真才實學,想學進來)

    摘要:所以與多線程相比,線程的數量越多,協程性能的優勢越明顯。值得一提的是,在此過程中,只有一個線程在執行,因此這與多線程的概念是不一樣的。 真正有知識的人的成長過程,就像麥穗的成長過程:麥穗空的時候,麥子長得很快,麥穗驕傲地高高昂起,但是,麥穗成熟飽滿時,它們開始謙虛,垂下麥芒。 ——蒙田《蒙田隨筆全集》 上篇論述了關于python多線程是否是雞肋的問題,得到了一些網友的認可,當然也有...

    lykops 評論0 收藏0
  • Python Tips

    摘要:的三種數據類型字典列表元組,分別用花括號中括號小括號表示。約等于上句,可能是因為自定義變量名與內部函數或變量同名了。下,默認路徑一般為。的日志模塊中計時器定時器計劃任務,。對象的問題怎樣忽略警告不打印煩人的警告打印到終端同時記錄到文件。 Python Enhancement Proposal。(PEP,Python增強建議書) Python之禪(import this) Pytho...

    Reducto 評論0 收藏0
  • python3.x安裝cv2失敗

    摘要:想給裝一個的庫,結果搗鼓半天,倒給裝上了,而里則一直失敗。在網上搜到有答案說要安裝頭文件。把該解決方法套用過來,將安裝目錄下我的是的文件拷貝到安裝目錄下的目錄下我的是即可。拷貝過去,測試,成功,問題解決。 0 想給python3裝一個opencv的庫,結果搗鼓半天,倒給python2.x裝上cv2了,而python3里import cv2則一直失敗。 1 首先想到動態鏈接庫,于是添加/...

    王笑朝 評論0 收藏0
  • css書寫規范

    摘要:樣式屬性順序單個樣式規則下的屬性在書寫時,應按功能進行分組,組之間需要有一個空行。同時要以的順序書寫,提高代碼的可讀性。 在書寫css樣式的時候總是無意中就寫亂了,無論是命名或者是樣式的書寫順序,這里做一個總結,提醒自己在書寫css的時候時刻注意,大家可以參考哈。 1. 樣式屬性順序 單個樣式規則下的屬性在書寫時,應按功能進行分組,組之間需要有一個空行。同時要以Positioning ...

    young.li 評論0 收藏0

發表評論

0條評論

zeyu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<