影想Python編譯的過程控制的三個參數詳細介紹
今天我們將給大家介紹一下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編譯的過程控制的實際應用方案的具體介紹。
【編輯推薦】