我是一名編程初學者,並嘗試從「Mark Lutz學習Python」中學習Python。在「介紹Python解釋器」篇的作者聲明如下:python解釋器是用什麼實現的?
根據其味道的Python運行,解釋本身可以實現爲一個C程序,一組Java類的,還是其他什麼東西。
我無法理解一段Python代碼如何在解釋器中進行區分(C語言程序或作爲狀態的Java類)。
我是一名編程初學者,並嘗試從「Mark Lutz學習Python」中學習Python。在「介紹Python解釋器」篇的作者聲明如下:python解釋器是用什麼實現的?
根據其味道的Python運行,解釋本身可以實現爲一個C程序,一組Java類的,還是其他什麼東西。
我無法理解一段Python代碼如何在解釋器中進行區分(C語言程序或作爲狀態的Java類)。
Python的參考解釋器是其他人用作參考的解釋器,用C語言編寫,它被稱爲CPython(不要與Cython混淆,它不是解釋器)。它將Python代碼編譯爲Python字節碼,並在其虛擬機上運行,該代碼也用C編寫。
還有其他的解釋器。這裏有一些最知名的。
理論上和理想情況下,所有嚴格合法的Python代碼應該在任何這些代碼上運行相同。想想這就像對C不同的編譯器:嚴格的法律C代碼可以編譯爲等價的任何規劃編制
void main()
是非標準的)。windows.h
庫(如CPython將無法訪問Java庫)。這聽起來像你真正的問題是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語言的解釋程序的實用方法。
你能否澄清你最後一句話的含義?我無法確定你對哪一方面感到困惑。 –
這意味着如果你在python中有一段代碼,還有另外一段代碼(它被寫成C或者Java或者其他),它會查看它並轉換成你的計算機的編程指令。這就是所謂的解釋器 - 否則Python代碼只會像文本文件一樣有用。 – sashkello
我想* Learning Python *的作者想說的是「有多個Python解釋器,其中一個用C實現,另一個用Java,另一個用別的東西。」 –