1. 程式人生 > 其它 >Python 位元組碼

Python 位元組碼

位元組碼(Bytecode):通常指的是已經經過編譯,但與特定機器程式碼無關,需要直譯器轉譯後才能成為機器程式碼的中間程式碼。位元組碼通常不像原始碼一樣可以讓人閱讀,而是編碼後的數值常量、引用、指令(也稱操作碼,Operation Code)等構成的序列。(Via wiki)

拿 Python 說明,Python 直譯器先翻譯 Python 原始碼( .py 檔案)為 Python 位元組碼( .pyc 檔案),然後再由 Python 虛擬機器來執行 Python 位元組碼。Python 位元組碼是一種類似於彙編指令的中間語言,一條 Python 語句會對應若干條位元組碼指令,虛擬機器一條條執行位元組碼指令,將其翻譯成機器程式碼,並交個 CPU 執行,從而完成程式的執行。

在 Python 3 中,Python 會自動在 __pycache__ 目錄裡,快取每個模組編譯後的版本,名稱為 module.version.pyc ,這就是 Python 位元組碼檔案。其中 version 一般使用 Python 版本號。例如,在 CPython 版本 3.7 中,spam.py 模組的編譯版本將被快取為 __pycache__/spam.cpython-37.pyc。此命名約定允許來自不同發行版和不同版本的 Python 的已編譯模組共存。簡單說就是一個原始檔,可以存在多個版本的 Python 位元組碼

位元組碼主要為了實現特定軟體執行和軟體環境、與硬體環境無關。位元組碼的實現方式是通過編譯器和虛擬機器。編譯器將原始碼編譯成位元組碼,特定平臺上的虛擬機器將位元組碼轉譯為可以直接執行的指令。位元組碼的典型應用為 Java bytecode。(Via wiki)

Python 位元組碼的好處:

提升可移植性。其實設計位元組碼是為了實現跨平臺執行程式碼,也就是具備可移植性。有了 Python 虛擬機器,我們就可以在不同的作業系統平臺運行同一個原始碼,因為位元組碼會被 Python 虛擬機器根據不同的作業系統平臺翻譯成相應的機器語言,從而執行。也就是說,我們有了 Python 虛擬機器這個翻譯官,只需要安心寫程式碼,至於把我們的程式碼轉化為二進位制程式碼,就交給翻譯官虛擬機器去做就可以了。

提升程式碼的載入速度。有些教程說提升執行速度,這個說法其實不算準確。Python 原始碼(.py檔案)和 Python 位元組碼的執行速度其實是一樣的,它是快在省略了原始碼的解析翻譯過程,最後的交給 CPU 執行階段所花的時間是一樣的。