Python 程式在電腦上的執行流程
當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟:
1. 編寫 Python 程式碼
開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py
檔案。
print("Hello, Python!")
這只是程式碼的起點,Python 需要經過一系列處理後才能執行它。
2. 解析 (Parsing) 與 語法檢查 (Syntax Checking)
Python 直譯器(Interpreter)首先會讀取 .py
檔案,進行詞法分析 (Lexical Analysis) 和 語法解析 (Parsing),確保程式碼符合語法規則。
例如,如果語法錯誤,如漏掉括號,Python 會在此階段報錯。
範例錯誤:
print("Hello, Python!" # 缺少關閉括號
Python 會回傳:
SyntaxError: unexpected EOF while parsing
3. 轉換為位元組碼 (Bytecode Compilation)
如果 Python 解析成功,下一步 Python 直譯器會將程式轉換成位元組碼 (Bytecode),這是一種中間格式,主要目的是讓 Python 程式執行更有效率。
這個 .pyc
檔案通常會存放在 __pycache__
目錄中。
範例:
main.py -> __pycache__/main.cpython-<version>.pyc
這個 .pyc
檔案包含了 Python 虛擬機器 (PVM) 可執行的指令。
4. 執行位元組碼 (透過 Python 虛擬機, PVM)
Python 直譯器內建的 Python 虛擬機器 (Python Virtual Machine, PVM) 負責執行位元組碼。PVM 會逐條解釋 .pyc
的指令,並執行相應的操作。
這部分類似 Java 虛擬機 (JVM),可以理解為 Python 內部的一個執行環境,讓程式碼能在不同平台(Windows、macOS、Linux)上運行,而不需要重新編譯。
5. 與作業系統互動
最終,PVM 執行 Python 程式時,會與作業系統進行溝通,例如:
- 檔案存取:讀取/寫入
.txt
或.csv
檔案。 - 記憶體管理:Python 內部的垃圾回收機制會管理變數與物件的記憶體釋放。
- 網路存取:像是
requests
套件可以用來存取 API。 - 硬體控制:例如
GPIO
控制樹莓派 (Raspberry Pi) 的感測器。
Python 程式執行流程圖
+-----------------------+
| 1. 撰寫 Python 程式 |
| (編輯器: VS Code) |
+-----------------------+
│
▼
+-----------------------+
| 2. 解析 & 語法檢查 |
| (Syntax Checking) |
+-----------------------+
│
▼
+-----------------------+
| 3. 轉換為位元組碼 |
| (Bytecode: .pyc) |
+-----------------------+
│
▼
+-----------------------+
| 4. PVM 執行位元組碼 |
| (Python 虛擬機) |
+-----------------------+
│
▼
+-----------------------+
| 5. 與作業系統互動 |
| (檔案 / 記憶體 / 網路) |
+-----------------------+
補充:為什麼 Python 是直譯式語言?
Python 雖然會先轉換為位元組碼 (Bytecode),但它並不像 C++ 或 Java 那樣預先編譯為機器碼 (Machine Code)。
而是透過 Python 虛擬機 (PVM) 逐行解釋並執行,因此 Python 屬於直譯式語言 (Interpreted Language)。
優點:
✔ 跨平台執行,Windows、macOS、Linux 都可運行✔ 可即時執行,不需要額外的編譯步驟
缺點:
❌ 執行速度較 C/C++ 稍慢(但可透過 Cython 或 JIT 加速)

Python 虛擬機 (PVM) 的角色
當 Python 直譯器將 .py
檔案轉換為位元組碼 (.pyc
),這些 Bytecode 不能直接在 CPU 上執行,而是需要 Python 虛擬機來解釋並執行。
PVM 主要有以下功能:
- 載入 (Loading)
- PVM 會將 .pyc 位元組碼載入到記憶體中,準備執行。
- 解譯 (Interpreting)
- PVM 會逐行讀取 Bytecode,並將其轉換為對應的機器指令。
- 這與 C/C++ 的編譯型語言不同,Python 是直譯式語言,因此 PVM 會一行一行執行,而不是一次性編譯成機器碼。
- 執行 (Execution)
- PVM 根據指令執行對應的操作,例如:變數賦值 (x = 5)函式呼叫 (print("Hello"))迴圈與條件判斷 (if, for, while)記憶體管理(透過 Garbage Collector 自動回收未使用的記憶體)
- 錯誤處理 (Exception Handling)
- 若程式執行過程中發生錯誤(如 ZeroDivisionError),PVM 會產生 例外(Exception) 並根據程式的錯誤處理機制決定如何處理。
- 與作業系統互動
- PVM 會向作業系統請求資源,例如:讀寫檔案網路請求多執行緒處理
- 這是透過 Python 的標準函式庫(如 os, socket, threading)完成的。