2016-07-13 1 views
0

Когда-то разборки функции python с использованием функции dis, есть пустые строки между некоторыми кодами операций, как показано ниже.Пустые строки в байт-коде 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 

The >> используются для обозначения меченых инструкции, но не похоже, чтобы получить то, что пустые строки для. Кто-нибудь понял, что означают эти пустые строки?

ответ

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 оригинального источника.

Смежные вопросы