Python執行機制
- 2022 年 3 月 28 日
- 筆記
- Python, Python基礎入門, 程式設計師, 程式語言
1.4 Python執行機制
Python中IDLE是其自帶的集成開發工具(IDE:同時擁有編輯、編譯、調試、運行等多種功能的集成工具),並且它也是Python自帶的編譯器和解釋器。
1.4.1 Python執行過程
1,我們通過文本編輯器或用自帶的IDLE編輯器創建py文件,並在其中編寫Python命令,編輯完成並調試無誤後保存。
2,通過在IDLE中執行Run Module(或快捷鍵F5
)運行程式,運行的過程本質是IDLE先調用自身的編譯功能轉換該程式為二進位形式的中間編碼
,並整理為PyCodeObject對象形式暫時保存在記憶體中,然後由解釋器逐行解釋得到最終結果。
1.4.2 Python編譯器
電腦不能直接理解機器語言(二進位語言)以外的其他語言,所以必須把由高級語言編寫的程式翻譯為機器可執行的機器語言,才能被電腦識別並執行。實現某種程式語言的這個翻譯功能的機制被稱為編譯。實現編譯功能的程式叫編譯器。
1.4.3 Python解釋器
經過Python編譯器編譯後形成中間編碼
並整理成PyCodeObject對象形式暫時保存在記憶體中。此時電腦CPU仍然無法直接執行,需要經過解釋器進行解釋,再次翻譯成CPU能夠直接執行的各種電腦指令。Python是一門解釋性語言,意味著Python在執行時是通過Python解釋器翻譯一行執行一行,如此循環往複直到所有的命令都執行完畢。在Python中解釋器主要的功能實現有三點:
1,把編譯得到的在記憶體中的pyCodeObject程式對象轉告給電腦處理模組,告訴它先後處理順序。
2,判斷提交給處理器的已經編譯過的pyCodeObject程式對象是否具有可重用性,若該對象有可重用性就將其保存到.pyc文件中,以便下次再用到時直接調用,不需再編譯。
3,解釋器將電腦處理器運算後的結果呈現出來或返回給被調用處。
因為要一行一行翻譯後執行,所以像Python這種解釋性語言運行起來速度會受到一定的影響。C語言是通過編譯器直接將腳本一次性翻譯成電腦能夠看懂並執行的指令,執行起來會比Python快很多。而Java既可以用解釋器也可以用編譯器。
為什麼Python不直接採用編譯器從而提高其運行速度呢?原因如下:
1、這麼做的意義不大,真正拖慢Python速度的不是解釋器,而是其動態性的語言設計,很多特性要依賴於程式元數據。比如語句a+b,在執行它之前,電腦根本就不知道a和b是什麼,是執行整數運算呢?還是浮點數運算?要知道,一般的電腦,執行整數運算和浮點數運算的運算單元是不一樣的。
2、編譯成機器碼可能在數值運算方面的性能會得到提升,但其他方面未必會得到顯著的性能提升。而且編譯也是要花時間的,C++的編譯就經常超過半小時。
1.4.3.1 常見Python解釋器
1,CPython
當我們從Python官方網站下載並安裝好Python後,就獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。啟動IDLE就是啟動CPython解釋器。CPython是使用最廣的Python解釋器。
2,IPython
IPython是基於CPython之上的一個互動式解釋器,IPython只是在交互方式上有所增強,但是執行Python程式碼的功能和CPython是完全一樣的。
CPython用>>>
作為提示符,而IPython用In [序號]:
作為提示符。
3,PyPy
PyPy是另一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python程式碼進行動態編譯,所以可以顯著提高Python程式碼的執行速度。
絕大部分Python程式碼都可以在PyPy下運行,但是PyPy對最新的第三方Python庫支援得不是很好,有滯後性。
4,Jython
Jython是運行在Java平台上的Python解釋器,可以直接把Python程式碼編譯成Java位元組碼執行。
5,IronPython
IronPython是運行在微軟.Net平台上的Python解釋器,可以直接把Python程式碼編譯成.Net的位元組碼。