分析 Python 字节码
Analysing a Python bytecode
在下面的Python字节码中,我想了解为什么i
的值在JUMP_ABSOLUTE
之前没有递增?
>>> import dis
>>> dis.dis("""for i in range(4):
... print(i)
... """)
1 0 SETUP_LOOP 24 (to 26)
2 LOAD_NAME 0 (range)
4 LOAD_CONST 0 (4)
6 CALL_FUNCTION 1
8 GET_ITER
>> 10 FOR_ITER 12 (to 24)
12 STORE_NAME 1 (i)
2 14 LOAD_NAME 2 (print)
16 LOAD_NAME 1 (i)
18 CALL_FUNCTION 1
20 POP_TOP
22 JUMP_ABSOLUTE 10
>> 24 POP_BLOCK
>> 26 LOAD_CONST 1 (None)
28 RETURN_VALUE
i
的进化是在第10行通过调用range
的魔术方法__next__
简单完成的。
在下面的Python字节码中,我想了解为什么i
的值在JUMP_ABSOLUTE
之前没有递增?
>>> import dis
>>> dis.dis("""for i in range(4):
... print(i)
... """)
1 0 SETUP_LOOP 24 (to 26)
2 LOAD_NAME 0 (range)
4 LOAD_CONST 0 (4)
6 CALL_FUNCTION 1
8 GET_ITER
>> 10 FOR_ITER 12 (to 24)
12 STORE_NAME 1 (i)
2 14 LOAD_NAME 2 (print)
16 LOAD_NAME 1 (i)
18 CALL_FUNCTION 1
20 POP_TOP
22 JUMP_ABSOLUTE 10
>> 24 POP_BLOCK
>> 26 LOAD_CONST 1 (None)
28 RETURN_VALUE
i
的进化是在第10行通过调用range
的魔术方法__next__
简单完成的。