2014-02-12 34 views
0

我是一名編程初學者,並嘗試從「Mark Lutz學習Python」中學習Python。在「介紹Python解釋器」篇的作者聲明如下:python解釋器是用什麼實現的?

根據其味道的Python運行,解釋本身可以實現爲一個C程序,一組Java類的,還是其他什麼東西。

我無法理解一段Python代碼如何在解釋器中進行區分(C語言程序或作爲狀態的Java類)。

+1

你能否澄清你最後一句話的含義?我無法確定你對哪一方面感到困惑。 –

+0

這意味着如果你在python中有一段代碼,還有另外一段代碼(它被寫成C或者Java或者其他),它會查看它並轉換成你的計算機的編程指令。這就是所謂的解釋器 - 否則Python代碼只會像文本文件一樣有用。 – sashkello

+0

我想* Learning Python *的作者想說的是「有多個Python解釋器,其中一個用C實現,另一個用Java,另一個用別的東西。」 –

回答

7

一段Python代碼,就是Python代碼。作者的意思是有不同的Python解釋器 - 所有這些解釋器都運行Python代碼。這些不同的Python解釋器可以是編寫在CJavaC#Python本身中的程序。它們是在命令行鍵入python時運行的程序,或者從應用程序菜單中選取python。通常情況下,它將是CPython:由Python軟件基金會編寫的用C語言編寫的語言的參考實現。

總而言之,這對於學習Python絕對不是必需的 - 只是跳過去,然後回來一旦你更熟悉語言,就可以解決這個問題。

2

Python的參考解釋器是其他人用作參考的解釋器,用C語言編寫,它被稱爲CPython(不要與Cython混淆,它不是解釋器)。它將Python代碼編譯爲Python字節碼,並在其虛擬機上運行,​​該代碼也用C編寫。

還有其他的解釋器。這裏有一些最知名的。

  • Jython,用Java編寫,它將Python編譯爲Java字節碼,並在Java虛擬機上運行它。它允許Python代碼調用Java代碼。不知何故。用C#編寫(其中一些顯然是用Python編寫的),它將Python編譯到Microsoft的CLI(糾正我,如果我錯了)字節碼,並在相應的虛擬機上運行它。
  • PyPy,用RPython(Python的一個更嚴格的分支)編寫,它將Python編譯爲PyPy字節碼(大部分與CPython字節碼相同)並在其虛擬機上運行它。更多信息:http://doc.pypy.org/en/latest/interpreter.html

理論上和理想情況下,所有嚴格合法的Python代碼應該在任何這些代碼上運行相同。想想這就像對C不同的編譯器:嚴格的法律C代碼可以編譯爲等價的任何規劃編制

  • 一些不規範的事情會由一個編譯器被允許的,但不是另一個(在Visual Studio void main()是非標準的)。
  • 用於Linux的編譯器將無法訪問windows.h庫(如CPython將無法訪問Java庫)。
  • 對於不同的任務,它們將具有不同的速度/內存性能。
1

這聽起來像你真正的問題是Python解釋器如何做它的功能。這是整個大學課程的主題,但這裏是主旨。

解釋器使用稱爲解析器的專用函數讀取Python源代碼。這是一個輸入處理器,以上下文無關語法的形式瞭解Python語言的確切結構。

解析過程檢查輸入是否符合Python語法規則(這裏是語法錯誤的起源),並生成一個數據結構,以簡單步驟的形式提取Python程序的原始含義稱爲字節碼的字節數組。

輸入,解析和字節碼生成的完整過程稱爲編譯。是的,Python的核心是一種簡單的編譯器。

字節碼根據測試結果,字符串操作,調用和返回函數,輸入,輸出以及Python程序執行的所有數百個基本操作,執行諸如算術,測試和跳轉到其他字節代碼位置等非常基本的事情在快速組合和執行時,使程序看起來很強大。

如果原始Python源代碼與人類語言相當接近,那麼這個字節代碼就相當接近機器語言:處理器理解爲指令的1和0的模式。字節碼是程序運行時寫入.pyc文件的內容。

它只需要一個非常小而簡單的程序(希望快一個)稱爲字節代碼解釋器(是Python解釋器中的解釋器)來處理字節代碼,以便讓處理器執行原計劃的Python程序。

當然,如果一個.pyc文件已經存在並且比相應的源代碼更新,編譯可以被跳過。

你有它......一個大學課程在幾句話。我已經跳過了大量的細節,並且(警告)我所寫的一些內容僅適用於那裏的許多Python實現,但這只是理解的一個開始。

您的書的作者說,以上所有的實現語言可能是C或Java(Python的Jython實現)。他忽略了只有最小的Python核心是用C或Java實現的。剩下的就是Python本身。

如果你有興趣瞭解更多,有一些相當不錯的,低成本和免費的來源。例如,請參閱this article以及嘗試使用Scheme 9 From Empty Space以獲取非Python語言的解釋程序的實用方法。

相關問題