首页 > 解决方案 > python新的AST优化器

问题描述

来自 python 3.7的新功能

恒定折叠已从窥视孔优化器移至新的 AST 优化器,它能够更一致地执行优化

这个新的 AST 优化器能够执行哪些优化,它与窥孔优化器有什么不同?

标签: pythonpython-3.xoptimizationpython-internals

解决方案


如果您阅读相关的错误 报告,它们会包含大部分详细信息。其中大部分都是非常枯燥的东西,对大多数代码来说并不重要,这就是为什么它们没有在“新功能”中包含细节的原因。

重要的示例通常是很少遇到的奇怪情况,但窥孔优化器(无法进行更高级别的评估,只是简单的字节码重写)无法处理,例如在 Python 3.6 上:

>>> 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

推荐阅读