我一直在使用' dis '模块来重新编写一些编译脚本(.pyc).我理解JUMP_FORWARD和JUMP_ABSOLUTE之间的区别.据我所知,IF语句将由JUMP_FORWARD关闭:
>>> def f():
if a:
print ''
>>> from dis import dis
>>> dis(f)
2 0 LOAD_GLOBAL 0 (a)
3 JUMP_IF_FALSE 9 (to 15)
6 POP_TOP
3 7 LOAD_CONST 1 ('')
10 PRINT_ITEM
11 PRINT_NEWLINE
12 JUMP_FORWARD 1 (to 16)
>> 15 POP_TOP
>> 16 LOAD_CONST 0 (None)
19 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
如果IF语句位于另一个循环的末尾,则会出现JUMP_ABSOLUTE.例如:
>>> def f1():
if a:
if b:
print ''
>>> dis(f1)
2 0 LOAD_GLOBAL 0 (a)
3 JUMP_IF_FALSE 20 (to 26)
6 POP_TOP
3 7 LOAD_GLOBAL …Run Code Online (Sandbox Code Playgroud)