2013-05-27 95 views
9

我知道.py和.pyc文件之間的區別。我的問題是如何爲什麼按照docs與.py文件相比,爲什麼.pyc文件的「運行」不會更快?

程序不會跑得更快,當它從一個.pyc文件讀取或.pyo 文件比從.py文件讀取時要多;關於.pyc或.pyo文件的唯一的更快速度是 加載。

.pyc文件加載導入速度更快。但是在加載.pyc文件的「運行」部分之後,與.py文件中的「運行」部分相同?這是爲什麼?我預計,

  • 位代碼(.pyc文件)更接近Python的虛擬機,因此運行速度更快正在整理
  • .py文件被執行之前,以.pyc文件。這需要一個額外的步驟,因此花費時間。

我的問題:導入部分後,爲什麼.pyc文件的運行部分與.py文件相比不會加快執行速度?

回答

16

當您運行.py文件時,它首先被編譯爲字節碼,然後執行。加載這樣的文件比較慢,因爲對於.pyc,編譯步驟已經執行,但是在加載之後,完成相同的字節碼解釋。

僞代碼,Python解釋器執行下面的算法:

code = load(path) 
if path.endswith(".py"): 
    code = compile(code) 
run(code) 
+0

愚蠢的,當然。謝謝。 – OrangeTux

+0

編譯程序一個.py文件: 進口py_compile py_compile.compile( 'Hello.py') - 這會產生Hello_cpython-36.pyc(根據您正在使用的實現) – maris

10

的方式,程序運行總是相同的。編譯後的代碼被解釋。

程序是加載的方式不同。如果當前有pyc文件,則將其視爲編譯版本,因此在運行該命令之前不需要執行編譯步驟。否則,py文件被讀取,編譯器必須編譯它(這需要一點時間),但是然後內存中的編譯版本就像在其他方式中一樣被解釋。

相關問題