我无法找到一个简单的解释,说明在使用-O或优化标志运行时python的作用有何不同。
答案 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)
这在某种程度上取决于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
构造根本不创建字节码,我发现它非常有用。