影想Python編譯的過程控制的三個參數(shù)詳細介紹
今天我們將給大家介紹一下Python編譯的過程控制是如進行的,以下的文章就是通過Python對相關(guān)字節(jié)碼進行一些優(yōu)化,以及所需優(yōu)化的相關(guān)代碼,下面的文章就是對Python編譯的過程控制的相關(guān)步驟的介紹。
介紹一下如何“稍微”Python編譯的過程控制。只所以說是稍微,是因為無論何種情況,Python都會對字節(jié)碼進行一些簡單優(yōu)化(basic Peephole Optimization,詳情參見Python的源代碼。2.5版本的Python位于 Python/compile.c,2.7版本則位于Python/peephole.c)。這些優(yōu)化不能通過環(huán)境變量或者命令參數(shù)將其禁用。比如:
- if True:
- return 1
- else:
- return 0
會被優(yōu)化成為:
- return 1
更多的優(yōu)化正被添加到Python源代碼內(nèi)。只有三個參數(shù)能影響Python編譯時的優(yōu)化:
第一、去除所有的assert語句,并將__debug__這個內(nèi)置變量的值設(shè)置為False。方法是運行Python的時候在命令行添加參數(shù):
- python -O im.py
第二、除了第一條所做的事情,還去除所有docstring。方法是運行Python的時候在命令行添加參數(shù):
- python -OO im.py
第三、默認(rèn)的,對于一個模塊,Python編譯后的字節(jié)碼會被保存到與源代碼相同的文件夾內(nèi)。這樣就可以加速模塊的載入速度。大多數(shù)使用Python的朋友們都寫過包含兩三個文件的程序。通??梢园l(fā)現(xiàn)除了.py文件之外,文件夾內(nèi)還會有.pyc文件。
mymodule.pyc文件即是mymodule.py的字節(jié)碼。如果運行Python的命令行包含了”-O”或者”-OO”參數(shù),Python會將優(yōu)化后的字節(jié)碼保存到mymodule.pyo文件。想要禁止生成.pyc或者.pyo文件,可以在運行Python的時候,在命令行里添加參數(shù):
- python -B im.py
還可以設(shè)置環(huán)境變量:
- c:\> set PYTHONDONTWRITEBYTECODE=x
看完上面三條說明,有的朋友可能會疑問,”-O”和”-OO”參數(shù)真的就干那三件事?不幸的是,還真是如此。至少在Python2.5的時候就是這樣。所以加”-O”參數(shù)并不能明顯優(yōu)化Python的運行速度。這兩個選項的真正作用是區(qū)分調(diào)試版本和發(fā)行版本。在程序中可以盡量多增加一些assert語句,以便程序員在調(diào)試階段發(fā)現(xiàn)一些隱藏的錯誤。而在發(fā)布時,將這些語句去除。如果你的軟件是商業(yè)軟件的話,加上”-OO”參數(shù)可以讓別人看不清內(nèi)部函數(shù)的用途,增加一些破解的難度。有了這些,誰還說Python不能寫商業(yè)軟件?以上的文章就是對Python編譯的過程控制的實際應(yīng)用方案的具體介紹。
【編輯推薦】