从Python 3.7的新功能中可以看到,常量折叠已经从Peephole优化器移动到了新的AST优化器中,这样能够更加一致地进行优化。
新的AST优化器能够执行哪些优化,并与Peephole优化器有何不同?
从Python 3.7的新功能中可以看到,常量折叠已经从Peephole优化器移动到了新的AST优化器中,这样能够更加一致地进行优化。
新的AST优化器能够执行哪些优化,并与Peephole优化器有何不同?
>>> import dis
>>> dis.dis('if True: pass') # Recognizes simple case and omits whole block
1 0 LOAD_CONST 0 (None)
2 RETURN_VALUE
>>> dis.dis('if True and 1: pass') # Can't recognize more complex case
1 0 LOAD_CONST 0 (True)
2 POP_JUMP_IF_FALSE 8
4 LOAD_CONST 1 (1)
6 POP_JUMP_IF_FALSE 8
>> 8 LOAD_CONST 2 (None)
10 RETURN_VALUE
相比之下,在3.7版本中:
>>> import dis
>>> dis.dis('if True: pass') # Recognizes simple case and omits whole block
1 0 LOAD_CONST 0 (None)
2 RETURN_VALUE
>>> dis.dis('if True and 1: pass') # Handles more complex case too
1 0 LOAD_CONST 0 (None)
2 RETURN_VALUE