使用optimize标志运行python有什么含义?

时间:2010-05-13 21:14:38

标签: python optimization

我无法找到一个简单的解释,说明在使用-O或优化标志运行时python的作用有何不同。

4 个答案:

答案 0 :(得分:26)

完全消除了

assert语句,以及if __debug__: ...形式的语句块(因此您可以将调试代码放在这样的语句块中,并且只运行-O以避免调试码)。

此外,使用-OO,文档字符串也会被删除。

答案 1 :(得分:24)

来自the docs

  

调用Python解释器时   使用-O标志,优化的代码是   生成并存储在.pyo文件中。   优化器目前没有帮助   许多;它只删除断言   声明。当使用-O时,全部   字节码优化; .pyc文件是   忽略和.py文件编译到   优化的字节码。

     

将两个-O标志传递给Python   翻译(-OO)将导致   字节码编译器来执行   可能在一些罕见的优化   案件导致故障   程式。目前只有__doc__   从字节码中删除字符串,   产生更紧凑的.pyo文件。   由于某些程序可能依赖于   这些可用,你应该只使用   这个选项,如果你知道你是什么   做。

     

程序运行时不会更快   它是从.pyc或.pyo文件中读取的   比从.py文件中读取时;   唯一更快的事情   .pyc或.pyo文件的速度是   他们被装上了。

换句话说,几乎没有。

答案 2 :(得分:7)

来自What does the -O flag do?

  

这在某种程度上取决于Python   版。准确地找出它是什么   ,搜索源代码   Py_OptimizeFlag。在2.5,它

     
      
  • 导致解释器加载.pyo文件,而不是.pyc文件(在.zip文件中,   只是让.pyo优先于.pyc)
  •   
  • 使__debug__的值为0
  •   
  • 忽略源代码中的断言语句
  •   
  • __debug__静态视为0
  •   
  • 使字节码生成器保存.pyo文件,而不是.pyc
  •   

答案 3 :(得分:5)

正如python optimization mode中所述:

python -O目前执行以下操作:

  • 完全忽略断言
  • 将特殊内置名称__debug__设置为False(默认情况下为True)

当被称为python -OO

  • 从代码中删除文档字符串

我不知道为什么每个人都忘记提及__debug__问题;也许是因为我是唯一使用它的人:)在if __debug__下运行时,-O构造根本不创建字节码,我发现它非常有用。

相关问题