From:https://blog.csdn.net/jeff_liu_sky_/article/details/52097060前端
https://stackoverflow.com/questions/17130975/python-vs-cpythonpython
解釋器是一種讓其餘程序運行起來的程序,它是代碼與機器的計算機硬件之間的軟件邏輯層,Python解釋器就是可以讓Python程序在機器上執行的一套程序。
當咱們執行寫好的Python代碼時,Python解釋器會執行兩個步驟算法
一、把原始代碼編譯成字節碼編程
編譯後的字節碼是特定於Python的一種表現形式,它不是二進制的機器碼,須要進一步編譯才能被機器執行,這也是Python代碼沒法運行的像C/C++ 同樣快的緣由。若是Python進程在機器上擁有寫入權限,那麼它將把程序的字節碼保存爲一個以.pyc 爲擴展名的文件,若是Python沒法在機器上寫入字節碼,那麼字節碼將會在內存中生成並在程序結束時自動丟棄。在構建程序的時候最好給Python賦上在計算機上寫的權限,這樣只要源代碼沒有改變,生成的.pyc文件能夠重複利用,提升執行效率。框架
二、把編譯好的字節碼轉發到Python虛擬機(PVM)中進行執行編程語言
PVM是 Python Virtual Machine的簡稱,它是Python的運行引擎,是Python系統的一部分,它是迭代運行字節碼指令的一個大循環、一個接一個地完成操做。 工具
Python解釋器有三種主要的實現方式,CPython、Jython和IronPython 三種實現方式 。優化
一、CPython.net
CPython 是標準的實現,其它的都是有特定目標的。
CPython 是由C語言編寫的,它是大多數Linux和Mac OS X機器預裝的Python解釋器,也是全部Python解釋器中運行最快、最完整、最健全的。設計
二、Jython
Jython 是一種Python語言的替代實現方式,其目的是爲了與Java編程語言集成,Jython 包含了Java類,這些類編譯Python源代碼、造成Java字節碼,並將獲得的字節碼映射到Java虛擬機(JVM)上。由於Jython要比CPython 慢並且也不夠健壯,它每每看做是一個主要面向尋找Java代碼前端腳本語言的Java開發者的一個有趣的工具。
三、IronPython
IronPython 設計的目的是讓Python 程序能夠與Windows 平臺上的.NET 框架以及與之對應的Linux的上開源的Mono編寫成的應用集成。
psyco 系統不是Python的另外一種實現方式,而是Python字節碼執行模塊的一個擴展組件,它可讓程序運行的更快。它是一個PVM的加強工具,這個工具收集並使用信息,在程序運行時,能夠將部分程序的字節碼轉換成底層的真正的二進制機器代碼,從而實現更快的執行速度。在開發個過程當中,Psyco無需代碼的修改或獨立的編譯步驟便可完成這一轉換。 歸納地講,就是當程序運行時,Psyco收集了正在傳遞過程當中的對象的類別信息,這些信息能夠用來裁剪對象的類型,從而生成高效的機器代碼。機器代碼一旦生成,就替代了對應的原始字節碼,從而加快程序的總體執行速度。一些經過Psyco優化的Python代碼的執行速度能夠像編譯好的C代碼同樣快。 由於字節碼的轉換與程序運行同時發生,因此Pysco每每被看作是一個即時編譯器(JIT)。實際上Psyco是一個專有的JIT編譯器:它生成機器代碼將數據類型精簡至你程序實際上所使用的類型。 Psyco是用純Python的算法代碼實現的。這點尤其重要,那些爲了優化每每須要遷移到C的那部分代碼,使用了Psyco後,這樣的遷移就沒有必要了。