python新AST优化器
来自Python3.7 常量折叠已从窥视孔优化器移动到新的AST优化器,后者能够更一致地执行优化python新AST优化器,python,python-3.x,optimization,python-internals,Python,Python 3.x,Optimization,Python Internals,来自Python3.7 常量折叠已从窥视孔优化器移动到新的AST优化器,后者能够更一致地执行优化 这个新的AST优化器能够执行哪些优化,它与窥视孔优化器有何不同?如果您阅读相关的,它们包含了大部分详细信息。大部分都是非常枯燥的东西,对大多数代码来说并不重要,这就是为什么他们没有在“What's New”中包含细节的原因 重要的例子通常是很少遇到的奇怪情况,但窥视孔优化器(不能进行更高级别的计算,只是简单的字节码重写)无法处理,例如在Python 3.6上: >>> import
这个新的AST优化器能够执行哪些优化,它与窥视孔优化器有何不同?如果您阅读相关的,它们包含了大部分详细信息。大部分都是非常枯燥的东西,对大多数代码来说并不重要,这就是为什么他们没有在“What's New”中包含细节的原因 重要的例子通常是很少遇到的奇怪情况,但窥视孔优化器(不能进行更高级别的计算,只是简单的字节码重写)无法处理,例如在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
这并不有趣,它能不能做更多的优化,比如函数的内联或循环展开?函数内联将是一个重要的补充。@AmjadHD:no。CPython没有也不会(在可预见的未来)进行任何此类积极的优化。正如我所说的,这是它没有在新版本中获得最高账单的一个原因;它基本上只是确保它所应用的真正基本的优化得到更一致的应用。