CPython是什麼?PyPy是什麼?Python和這兩個東西有什麼關係呢?Python的底層使用什麼語言實現?學習Python需要學習底層實現嗎?


首先Python是一種語言,因此根據其實現的不同,有Cpython, Jython, Pypy等。

CPython即用C語言實現Python及其解釋器(JIT編譯器),Jython是用Java語言來實現,Pypy是用Python來實現(準確說是個Python子集)。就好像是英語也分美國、英國、澳大利亞等英語,其語法是想通的,但是類庫的實現是不同的。

至於學習Python是否要學習底層實現,這個應該是不必要的,只從應用的角度來說,是沒這個必要的。但是如果需要系統的掌握這門語言,那麼了解底層實現更有助於了解這門語言的設計思想以及實現限制等方面。


1.CPython是最流行的Python實現

2.PyPy也是一種Python實現,實現的語言是RPython

3.Python:共產主義;CPython:蘇聯;PyPy:天朝

4.根據不同實現,用C(CPython)C++(Pyston)Java(Jython)C#(IronPython)RubyJS都有,成熟度非常不同

5.有必要。


Python是一門語言,有語法等規範。但是落實到具體實現上,就不一樣了。用C實現的叫CPython,也是目前的參考實現。即最新的語言特性都是在這個上面先實現,Linux,OS X等自帶的也是這個版本。用.NET實現的叫IronPython,Java的叫Jython,用Python實現的叫PyPy


Python解釋器


最早python被吉多發明出來時並沒有這麼多複雜的東西。最早的python 解釋器是用C寫的。而這個解釋器後來被納入到python基金會的管轄,就叫做了CPython。

CPython是目前最為廣泛使用的解釋器。包括Anaconda裡面也是裝載CPython。CPython由於出現最早,而且是官方版本加上對於C/Python API的全面支援,讓他有了極為廣大的第三方包支援。然而CPython有幾個缺陷,首先是全局鎖使得python在多線程效能上有很大的損害,CPython本身無法支援JIT技術也讓純python的執行速度被Java和Javascript等語言拋在後頭。於是出現了Pypy。

Pypy是一個以python實現的解釋器,對CPython的缺陷進行各方面的改良後在效率上有了大幅度的提升。然而因為無法支援官方的C/Python API,使得一些極為重要的第三方包沒辦法使用。例如Numpy。這讓Pypy一直無法被廣泛使用。另外還有像Pyston等等的新解釋器,都希望能夠對CPython的缺陷做改善。只是短期間內還沒辦法看到可以完全取代CPython的繼任者。

另外還有Jython,讓python code可以在JVM上面跑和調用java code的解釋器。Micro Python,一個要把python放上微控制器的解釋器。以及Cython這種添加了許多C相關新語法的編譯器。解釋器何其多,可見我們社群是多麼的活躍和壯大 (X)。

對於學習Python需不需要學習底層實現這個問題,這就要看投資是否值得了。了解一些底層實作的話的確在對於編寫程序時的運行效率,記憶體使用效率都會有比較好的理解和幫助。如果是熟悉C語言的話,其實滿推薦花一點時間學習底層實現的。當然學習還是要有順序的,學習底層實作應該是最後一個步驟。在學完語法之後,對於python純物件導向的特性甚至是函數導向的編程方法都要有基本的理解。接著要多學習各個第三方包的使用,必要時可以先看看一寫第三方包的python源碼。在能夠熟練地使用python開發之後,先熟悉C/Python API,可以用C為python開發套件,最後才應該到學習python原始碼的部分。


推薦閱讀:

如何理解 Tornado ?
如何快速學會一個web框架?
如何開發一個Python web框架?
什麼時候應該從python2轉向python3?
Python系統實現可插拔python插件?

TAG:Python | PyPy | Python框架 |