Как мне понять вывод dis.dis?
Я хотел бы понять, как использоватьdis (распространитель байт-кода Python), В частности, как следует интерпретировать выводdis.dis
(или жеdis.disassemble
)?
.
Here is a very specific example (in Python 2.7.3):
dis.dis("heapq.nsmallest(d,3)")
0 BUILD_SET 24933
3 JUMP_IF_TRUE_OR_POP 11889
6 JUMP_FORWARD 28019 (to 28028)
9 STORE_GLOBAL 27756 (27756)
12 LOAD_NAME 29811 (29811)
15 STORE_SLICE+0
16 LOAD_CONST 13100 (13100)
19 STORE_SLICE+1
я вижу этоJUMP_IF_TRUE_OR_POP
и т.д. являются инструкциями байт-кода(although interestingly, BUILD_SET
does not appear in this list, though I expect it works as BUILD_TUPLE
), Я думаю, что цифры справа - это выделения памяти, а цифры слеваидти к цифры ... я замечаю, что ониalmost увеличивать на 3 каждый раз (но не совсем).
Если я завернуdis.dis("heapq.nsmallest(d,3)")
внутри функции:
def f_heapq_nsmallest(d,n):
return heapq.nsmallest(d,n)
dis.dis("f_heapq(d,3)")
0 BUILD_TUPLE 26719
3 LOAD_NAME 28769 (28769)
6 JUMP_ABSOLUTE 25640
9 <44> # what is <44> ?
10 DELETE_SLICE+1
11 STORE_SLICE+1