下面分別列出幾個主要的實現。
1.CPython:這是Python的官方版本,使用C語言實現,使用最為廣泛,新的語言特性壹般也最先出現在這裏。
CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),然後運行在Python虛擬機上。
2.J
ython:這是Python的Java實現,相比於CPython,它與Java語言之間的互操作性要遠遠高於CPython和C語言之間的互操作性。
在Python中可以直接使用Java代碼庫,這使得使用Python可以方便地為Java程序寫測試代碼,更進壹步,可以在Python中使用Swing等圖形庫編寫GUI程序。
Jython會將Python代碼動態編譯成Java字節碼,然後在JVM上運行轉換後的程序,這意味著此時Python程序與Java程序沒有區別,只是源代碼不壹樣。
在Python 中寫壹個類,像使用Java 類壹樣使用這個類是很容易的事情。
妳甚至可以把Jython 腳本靜態地編譯為Java 字節碼。
示例代碼:fromjava.langimportSystemSystem.out.write('Hello World!
')
3.Python for .NET:它實質上是CPython實現的
.NET托管版本,它與.NET庫和程序代碼有很好的互操作性。4.
IronPython:不同於Python for .NET,它是Python的C#實現,並且它將Python代碼編譯成C#中間代碼(與Jython類似),然後運行,它與.NET語言的互操作性也非常好。5.
PyPy:Python的Python實現版本,原理是這樣的,PyPy運行在CPython(或者其它實現)之上,用戶程序運行在PyPy之上。它的壹個目標是成為Python語言自身的試驗場,因為可以很容易地修改PyPy解釋器的實現(因為它是使用Python寫的)。6.
Stackless:CPython的壹個局限就是每個Python函數調用都會產生壹個C函數調用。這意味著同時產生的函數調用是有限制的,因此Python難以實現用戶級的線程庫和復雜遞歸應用。壹旦超越這個限制,程序就會崩潰。Stackless的Python實現突破了這個限制,壹個C棧幀可以擁有任意數量的Python棧幀。這樣妳就能夠擁有幾乎無窮的函數調用,並能支持巨大數量的線程。Stackless唯壹的問題就是它要對現有的CPython解釋器做重大修改。所以它幾乎是壹個獨立的分支。另壹個名為Greenlets的項目也支持微線程。它是壹個標準的C擴展,因此不需要對標準Python解釋器做任何修改。
下面的這篇文章對Stackless做了比較多的介紹,但是也比較難以讀懂:
可愛的 Python:Python實現內幕