小编Ale*_*lex的帖子

带IF语句的JUMP_FORWARD或JUMP_ABSOLUTE?Python 2.5

我一直在使用' 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)

python if-statement bytecode

7
推荐指数
1
解决办法
722
查看次数

标签 统计

bytecode ×1

if-statement ×1

python ×1