Python优化(-O或PYTHONOPTIMIZE)有什么作用?

max*_*max 41 python optimization python-3.x

文档只说Python解释器执行"基本优化",而不涉及任何细节.显然,它依赖于实现,但有没有办法让我们了解可以优化哪些类型的事物,以及它可以节省多少运行时间?

使用-O有什么缺点吗?

我唯一知道的是-O禁用assert,但可能不应该assert用于生产中仍然可能出错的东西.

Mar*_*wis 48

在Python 2.7中,-O具有以下效果:

另外-OO还有以下效果:

要验证不同版本的CPython的效果,请使用grep源代码Py_OptimizeFlag.

链接到官方文档:https://docs.python.org/2.7/tutorial/modules.html#compiled-python-files

  • @max:总的来说,我不希望速度发生任何重大变化.优化的字节代码最初设计用于丢弃低效的SETLINENO字节代码指令,这是单步执行所需的.然而,自从使用更有效的方法重新实现以来,单步执行,所以-O已经失去了它的观点. (13认同)
  • 我已经看到许多假设文档字符串可用的python模块,并且如果使用该优化级别会破坏,例如在我工作的公司,原始sql放在docstrings中,并通过函数装饰器执行(甚至不开玩笑) ).有点不那么频繁,`assert`用于执行逻辑函数,而不仅仅是声明代码中某个点的不变预期,因此任何类似的代码也会破坏. (10认同)
  • 至少在当前的CPython版本中,`__ debug_`不仅仅被改为`False`,`if __debug__`下的任何代码都被完全剥离了. (10认同)