Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python新AST优化器_Python_Python 3.x_Optimization_Python Internals - Fatal编程技术网

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

来自Python3.7

常量折叠已从窥视孔优化器移动到新的AST优化器,后者能够更一致地执行优化


这个新的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没有也不会(在可预见的未来)进行任何此类积极的优化。正如我所说的,这是它没有在新版本中获得最高账单的一个原因;它基本上只是确保它所应用的真正基本的优化得到更一致的应用。