python优化模式

zah*_*pov 28 python

Python可以在优化模式(-O)下运行脚本,关闭调试,如assert,如果我还记得删除文档字符串.我没有看到它真的使用过,也许它只是过去时代的神器.它被使用了吗?做什么的?

为什么在Python 3中没有删除这个无用的东西?

tzo*_*zot 47

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

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

当被称为python -OO时

  • 从代码中删除docstrings

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


Ale*_*lli 35

如果您分发任何仅包含.pyo文件的存档表单,它将节省少量内存和少量磁盘空间.(如果你assert经常使用,也许条件复杂,节省的费用可能不小,也可以延长到运行时间).

所以,它绝对不是无用的 -当然,它的使用(如果部署一个Python编码服务器程序到N个服务器的机器,为什么一个巨大的数字永远将你不想浪费N*X字节,以保持文档字符串没人,永远,无论如何都能访问?!).当然如果能节省更多的话会更好,但是,嘿 - 不要浪费,不要! - )

所以保持这个功能几乎是不费脑子的(在任何情况下都很简单,你知道;-)在Python 3中 - 为什么甚至将"epsilon"添加到后者的采用困难中? - )


abb*_*bot 6

不同Linux发行版中的预打包软件通常使用-O进行字节编译.例如,这可以从Fedora包装指南中获取python应用程序:

在过去,%ghost .pyo文件的常见做法是为了在用户文件系统上节省少量空间.但是,这有两个问题:1.使用SELinux,如果用户正在运行python -O [APP],它将尝试在不存在时编写.pyos.这导致日志中的AVC拒绝记录.2.如果系统管理员运行python -OO [APP],将创建没有docstrings的.pyos.有些程序需要文档字符串才能运行.在使用python -O [APP]的后续运行中,即使已经请求了不同的优化级别,python仍将使用缓存的.pyos.解决这个问题的唯一方法是找出.pyos的位置并删除它们.

处理pyo文件的当前方法是按原样包含它们,没有%重影.