python是否可以編譯成某些字節代碼,或者每次像php/asp那樣將其渲染?python在網絡上,它是否編譯爲字節碼或者它更像PHP?
從我的閱讀中我看到它有自己的字節碼格式,所以我覺得它就像java/.net,它編譯成中間語言/字節碼。
所以它是更有效的,在這方面,PHP的權利?
python是否可以編譯成某些字節代碼,或者每次像php/asp那樣將其渲染?python在網絡上,它是否編譯爲字節碼或者它更像PHP?
從我的閱讀中我看到它有自己的字節碼格式,所以我覺得它就像java/.net,它編譯成中間語言/字節碼。
所以它是更有效的,在這方面,PHP的權利?
您可以編譯python到PYC(http://effbot.org/zone/python-compile.htm)。然而,只執行一個python腳本不會自動完成這個編譯,所以一個使用python的CGI web設置不會自動編譯。
當你在Python中使用一個模塊時,它(通常)會被編譯,如果它還沒有。例如,如果您的Django應用程序只部署了.py
文件,則它們將被編譯(並且輸出爲.pyc
文件),因爲模塊是由應用程序導入的。
給定一種語言X,以及服務器可以知道它的一種方式(一個模塊或其他)或一個適當的「中間」CGI程序mX,這個mX可以被編程,以便它確實直接解釋純文本腳本X(如php)或字節碼編譯代碼(最初用X編寫)。所以,如果存在適當的mX,它可能是兩種選擇。但我認爲最常見的和php和asp相同。
與字節應對可能比解釋腳本更有效(即使現代的解釋是不是在簡單的方式實現,並使用「技巧」來提高性能)
你可以很容易地看到字節碼:
>>> import dis
>>> dis.dis(lambda x: x*2)
1 0 LOAD_FAST 0 (x)
3 LOAD_CONST 0 (2)
6 BINARY_MULTIPLY
7 RETURN_VALUE
>>>
Python模塊在導入時「編譯」爲.pyc
文件。這與編譯Java或.NET並不相同,剩下的與您的源代碼幾乎有1-1對應關係;這意味着下次不需要解析文件,但這就是全部。
您可以使用compile
或compileall
模塊預編譯腳本包,或者編譯腳本,否則不會編譯腳本。我不認爲從命令行(或來自CGI)運行腳本會使用.pyc
。
所以它不像java/.net那樣在這方面「有效」呢? – Blankman 2010-06-07 14:39:24
以什麼方式?它在部署之前不會被編譯*,如果這就是你的意思。 (一般來說,Python沒有Java的性能,但這是出於其他原因。) – mipadi 2010-06-07 14:44:32