2016-07-13 23 views
0

當使用dis函數反編譯python函數時,某些操作碼之間會有空行,如下所示。python字節碼中的空白行

>>> dis(fizzbuzz) 
    2   0 LOAD_FAST    0 (n) 
       3 LOAD_CONST    1 (3) 
       6 BINARY_MODULO 
       7 LOAD_CONST    2 (0) 
      10 COMPARE_OP    2 (==) 
      13 POP_JUMP_IF_FALSE  36 
      16 LOAD_FAST    0 (n) 
      19 LOAD_CONST    3 (5) 
      22 BINARY_MODULO 
      23 LOAD_CONST    2 (0) 
      26 COMPARE_OP    2 (==) 
      29 POP_JUMP_IF_FALSE  36 

    3   32 LOAD_CONST    4 ('FizzBuzz') 
      35 RETURN_VALUE 

    4  >> 36 LOAD_FAST    0 (n) 
      39 LOAD_CONST    1 (3) 
      42 BINARY_MODULO 
      43 LOAD_CONST    2 (0) 
      46 COMPARE_OP    2 (==) 
      49 POP_JUMP_IF_FALSE  56 

    5   52 LOAD_CONST    5 ('Fizz') 
      55 RETURN_VALUE 

    6  >> 56 LOAD_FAST    0 (n) 
      59 LOAD_CONST    3 (5) 
      62 BINARY_MODULO 
      63 LOAD_CONST    2 (0) 
      66 COMPARE_OP    2 (==) 
      69 POP_JUMP_IF_FALSE  76 

    7   72 LOAD_CONST    6 ('Buzz') 
      75 RETURN_VALUE 

    9  >> 76 LOAD_GLOBAL    0 (str) 
      79 LOAD_FAST    0 (n) 
      82 CALL_FUNCTION   1 (1 positional, 0 keyword pair) 
      85 RETURN_VALUE 
      86 LOAD_CONST    0 (None) 
      89 RETURN_VALUE 

>>用於指示標記指示,但我似乎並沒有得到什麼的空行是。有沒有人知道這些空行意味着什麼?

回答

1

空白行是語句反彙編之間的中斷。假設你有它們,塊的第一行前面的數字是源的行號。

例如:

def test(): 
    x = 1 
    y = 2 

將顯示爲

2   0 LOAD_CONST    1 (1) 
      3 STORE_FAST    0 (x) 

3   6 LOAD_CONST    2 (2) 
      9 STORE_FAST    1 (y) 

當2和3指代線2和原始源的3。