运行Python时使用优化标志有什么影响?
当你用 -O
(优化)这个标志来运行Python时,它会做一些不同的事情。
简单来说,使用这个标志可以让Python在运行程序时进行一些优化,主要是为了提高代码的执行速度。具体来说,它会忽略一些调试信息,比如那些用来帮助开发者找错误的断言(assert)语句。这意味着如果你的代码里有这样的断言,它们在优化模式下就不会被执行了。
总的来说,-O
标志的作用就是让你的Python程序运行得更快,但同时也可能会失去一些调试时的帮助信息。
4 个回答
10
来自 -O 标志有什么作用?
这其实有点依赖于你使用的 Python 版本。要想准确知道它的作用,可以在源代码中查找 Py_OptimizeFlag。在 2.5 版本中,它会:
- 让解释器加载 .pyo 文件,而不是 .pyc 文件(在 .zip 文件中,.pyo 文件会比 .pyc 文件更优先)
- 让
__debug__
的值变成 0- 忽略源代码中的 assert 语句
- 把
__debug__
静态地当作 0 来处理- 让字节码生成器保存 .pyo 文件,而不是 .pyc 文件
35
来自官方文档:
- 你可以在运行Python命令时使用
-O
或-OO
选项来减小编译模块的大小。-O
选项会去掉一些断言语句,而-OO
选项则会同时去掉断言语句和文档字符串(__doc__)。因为有些程序可能需要这些内容,所以只有在你知道自己在做什么的情况下才应该使用这个选项。“优化过的”模块会有一个opt-
的标签,通常体积会更小。未来的版本可能会改变优化的效果。- 程序从
.pyc
文件运行并不会比从.py
文件运行快;.pyc
文件唯一快的地方在于加载的速度。
换句话说,几乎没有什么变化。
41
assert
语句会被完全去掉,类似 if __debug__: ...
这种形式的代码块也会被去掉(所以你可以把调试代码放在这些代码块里,然后用 -O
运行时就不会执行这些调试代码)。
而使用 -OO
的话,文档字符串也会被去掉。