2010-01-13 82 views
21

Python可以在優化模式(-O)下運行腳本,該模式會關閉像assert這樣的調試,並且如果我還記得刪除文檔字符串。我沒有看到它真的用過,也許它只是過去時代的人造物。它被使用了嗎?做什麼的?python優化模式

爲什麼這個無用的東西在Python 3中被刪除?

+0

好問題,但不知道爲什麼你想要刪除它! –

回答

28

如果您分發任何僅包含.pyo文件的歸檔表格,它可以節省少量內存和少量磁盤空間。 (如果您使用assert很多,並且可能有複雜的條件,則節省可能不是微不足道的,並且可能會延長到運行時間)。

所以,它絕對不是無用 - 當然它的使用(如果部署一個Python編碼服務器程序服務器計算機的數量龐大的N,爲什麼曾經將要浪費N * X字節保留文檔,無論如何,任何人都無法訪問?!)。當然,它會更好,如果它節省更多,但是,嘿 - 浪費不是,不想! - )

所以這幾乎是一個不費腦力的事情來保持這種功能(這在任何情況下都很簡單在Python 3中提供,你知道;-) - 爲什麼在後者的採用困難中增加「epsilon」? - )

3

刪除聲明意味着小型性能優勢,因此您可以將其用於「發佈」代碼。無論如何,沒有人使用它,因爲許多Python庫都是開源的,因此help()函數應該可以工作。

所以,只要沒有任何real這種模式下的優化,你可以忽略它。

6

不同的Linux發行版中的預裝軟件通常使用-O進行字節編譯。例如,這如果從Fedora packaging guidelines爲Python應用程序:

在過去,它是常見的做法%幽靈.pyo文件以節省用戶的文件系統的少量空間。但是,這有兩個問題:1.在SELinux中,如果用戶正在運行python -O [APP],它將在.pyos不存在時嘗試寫入.pyos。這會導致日誌中的AVC拒絕記錄。 2.如果系統管理員運行python -OO [APP],那麼.pyos將被創建而沒有文檔字符串。有些程序需要文檔才能運行。在隨後使用python -O [APP]運行時,即使已請求不同的優化級別,python也會使用緩存的.pyos。解決這個問題的唯一方法是找出.pyos的位置並刪除它們。

處理pyo文件的當前方法是按原樣包含它們,沒有%ghosting。

38

蟒蛇-O執行以下操作目前:

  • 完全忽略斷言
  • 套特殊內建名__debug__爲False(默認爲真)

和調用時as python -OO

  • 從代碼中刪除docstrings

我不知道爲什麼每個人都忘記提及__debug__問題;也許這是因爲我是唯一使用它的:) if __debug__構造在-O下運行時根本沒有創建字節碼,我發現它非常有用。