今天我们将给大家介绍一下Python编译的过程控制是如进行的,以下的文章就是通过Python对相关字节码进行一些优化,以及所需优化的相关代码,下面的文章就是对Python编译的过程控制的相关步骤的介绍。
介绍一下如何“稍微”Python编译的过程控制。只所以说是稍微,是因为无论何种情况,Python都会对字节码进行一些简单优化(basic Peephole Optimization,详情参见Python的源代码。2.5版本的Python位于 Python/compile.c,2.7版本则位于Python/peephole.c)。这些优化不能通过环境变量或者命令参数将其禁用。比如:
- if True:
- return 1
- else:
- return 0
会被优化成为:
- return 1
更多的优化正被添加到Python源代码内。只有三个参数能影响Python编译时的优化:
第一、去除所有的assert语句,并将__debug__这个内置变量的值设置为False。方法是运行Python的时候在命令行添加参数:
- python -O im.py
第二、除了第一条所做的事情,还去除所有docstring。方法是运行Python的时候在命令行添加参数:
- python -OO im.py
第三、默认的,对于一个模块,Python编译后的字节码会被保存到与源代码相同的文件夹内。这样就可以加速模块的载入速度。大多数使用Python的朋友们都写过包含两三个文件的程序。通常可以发现除了.py文件之外,文件夹内还会有.pyc文件。
mymodule.pyc文件即是mymodule.py的字节码。如果运行Python的命令行包含了”-O”或者”-OO”参数,Python会将优化后的字节码保存到mymodule.pyo文件。想要禁止生成.pyc或者.pyo文件,可以在运行Python的时候,在命令行里添加参数:
- python -B im.py
还可以设置环境变量:
- c:\> set PYTHONDONTWRITEBYTECODE=x
看完上面三条说明,有的朋友可能会疑问,”-O”和”-OO”参数真的就干那三件事?不幸的是,还真是如此。至少在Python2.5的时候就是这样。所以加”-O”参数并不能明显优化Python的运行速度。这两个选项的真正作用是区分调试版本和发行版本。在程序中可以尽量多增加一些assert语句,以便程序员在调试阶段发现一些隐藏的错误。而在发布时,将这些语句去除。如果你的软件是商业软件的话,加上”-OO”参数可以让别人看不清内部函数的用途,增加一些破解的难度。有了这些,谁还说Python不能写商业软件?以上的文章就是对Python编译的过程控制的实际应用方案的具体介绍。
【编辑推荐】