Python可以在优化模式(-O)下运行脚本,关闭调试,如assert,如果我还记得删除文档字符串。我没有看到它真的使用过,也许它只是过去时代的神器。它被使用了吗?做什么的?
为什么在Python 3中没有删除这个无用的东西?
答案 0 :(得分:44)
python -O目前执行以下操作:
__debug__
设置为False(默认情况下为True)当被称为python -OO
时我不知道为什么每个人都忘记提及__debug__
问题;也许是因为我是唯一使用它的人:)在if __debug__
下运行时,-O
构造根本不创建字节码,我发现它非常有用。
答案 1 :(得分:33)
如果您分发任何仅包含.pyo
个文件的存档表单,它会节省少量内存和少量磁盘空间。 (如果您经常使用assert
,并且可能使用复杂的条件,那么节省的费用可能并不简单,并且可以延长到运行时间。)
所以,它肯定不是无用的 - 当然它正在被使用(如果你将Python编码的服务器程序部署到大量N台服务器机器上,为什么永远你想浪费N * X字节来保存那些无论如何都无法访问的文档字符串吗?!)。当然,如果它能保存更多会更好,但是,嘿 - 不要浪费,不要! - )
因此,保持这种功能(在任何情况下都很容易提供,你知道;-)在Python 3中 - 为什么甚至将“epsilon”添加到后者的采用困难中是非常明智的? - )
答案 2 :(得分:6)
不同Linux发行版中的预打包软件通常使用-O进行字节编译。例如,这来自Fedora packaging guidelines对于python应用程序:
在过去,%ghost .pyo文件的常见做法是为了在用户文件系统上节省少量空间。但是,这有两个问题:1。使用SELinux,如果用户正在运行python -O [APP],它将尝试在不存在时编写.pyos。这导致日志中的AVC拒绝记录。 2.如果系统管理员运行python -OO [APP],将创建没有docstrings的.pyos。有些程序需要文档字符串才能运行。在使用python -O [APP]的后续运行中,即使已经请求了不同的优化级别,python仍将使用缓存的.pyos。解决这个问题的唯一方法是找出.pyos的位置并删除它们。
当前处理pyo文件的方法是按原样包含它们,没有%重影。
答案 3 :(得分:4)
删除断言意味着小性能优势,因此您可以将其用于“发布”代码。无论如何,没有人使用它,因为许多Python库是开源的,因此help()
函数应该可以工作。
因此,只要在此模式下没有任何真正的优化,您就可以忽略它。