Python 程式在電腦上的執行流程

更新於 發佈於 閱讀時間約 7 分鐘

Python 程式在電腦上的執行流程

當我們在電腦上執行 Python 程式時,主要經歷以下幾個步驟:

1. 編寫 Python 程式碼

開發者使用文字編輯器或 IDE(如 VS Code、PyCharm)撰寫 Python 程式,並將其存為 .py 檔案。

例如,一個簡單的 Python 程式可能如下:

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 加速)

raw-image



Python 虛擬機 (PVM) 的角色

當 Python 直譯器將 .py 檔案轉換為位元組碼 (.pyc),這些 Bytecode 不能直接在 CPU 上執行,而是需要 Python 虛擬機來解釋並執行。

PVM 主要有以下功能:

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


安裝 Python 直譯器時,大多數開發者使用的就是 CPython


avatar-img
131會員
218內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
生成器本身是一種只能輸出數據的結構,它不像列表或其他容器可以存儲數據並操作。它是一種(lazy evaluation)輸出數據的結構,生成器僅在需要時生成數據。因此,它對於處理大數據集或無限序列時非常高效。 然而,生成器與列表或其他容器不同的一個特點是,生成器通常只能輸出數據,但在某些情況下,我們
生成器表達式是 Python 中一種更簡潔的語法,專門用來創建生成器。它的語法與列表生成式類似,但將列表生成式中的方括號 [] 替換為小括號 ()。生成器表達式與生成器函數類似,具有「惰性評估」的特性,因此它只在需要時才生成元素,從而節省記憶體。 生成器的「惰性評估」(也叫延遲求值)指的是生成器不
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
在 Python 中,tuple 與 List有一個關鍵的不同點:tuple 是不可變的,這意味著一旦創建了 tuple,就無法更改其內容。 這與 List的可變性形成了對比,list 可以新增、刪除或修改元素。 元素的意思: 元素:指的是 List 中的每一個獨立的項目或值。
在一個典型的程式專案中,UI、Controller 和 Main 的分工通常遵循 MVC 模型(Model-View-Controller) 的架構,這是一種常見的設計模式,能夠將應用程式的邏輯和界面進行分離。 大部分典型的程式專案設計: UI (View):專注於用戶界面,展示數據,並將用
生成器本身是一種只能輸出數據的結構,它不像列表或其他容器可以存儲數據並操作。它是一種(lazy evaluation)輸出數據的結構,生成器僅在需要時生成數據。因此,它對於處理大數據集或無限序列時非常高效。 然而,生成器與列表或其他容器不同的一個特點是,生成器通常只能輸出數據,但在某些情況下,我們
生成器表達式是 Python 中一種更簡潔的語法,專門用來創建生成器。它的語法與列表生成式類似,但將列表生成式中的方括號 [] 替換為小括號 ()。生成器表達式與生成器函數類似,具有「惰性評估」的特性,因此它只在需要時才生成元素,從而節省記憶體。 生成器的「惰性評估」(也叫延遲求值)指的是生成器不
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
在 Python 中,tuple 與 List有一個關鍵的不同點:tuple 是不可變的,這意味著一旦創建了 tuple,就無法更改其內容。 這與 List的可變性形成了對比,list 可以新增、刪除或修改元素。 元素的意思: 元素:指的是 List 中的每一個獨立的項目或值。
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
在一次五天的年假中,我決定開始學習Python編程。雖然最初進展順利,但後來發現自己在解題和邏輯方面遇到了困難。經過思考後,我決定轉而學習C/C++,並且制定了一個計畫,希望成為一名後端工程師。這將需要挑戰我的時間管理能力。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
Python 作為一門廣泛應用的程式語言,提供了多種處理日期和時間的方法和函式庫。本文將介紹 Python 中日期和時間的處理方式,涵蓋基本概念、常用函數,並通過實例來說明其應用。
Thumbnail
本文將介紹如何在 Python 中讀取和寫入文本文件,以及如何處理文件操作過程中可能發生的異常,透過具體的程式碼範例來說明這些概念,讓你能夠清楚的理解並運用在實際的程式設計中。
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
在一次五天的年假中,我決定開始學習Python編程。雖然最初進展順利,但後來發現自己在解題和邏輯方面遇到了困難。經過思考後,我決定轉而學習C/C++,並且制定了一個計畫,希望成為一名後端工程師。這將需要挑戰我的時間管理能力。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
想要開始Python語言的開發環境,有兩種常見方式,一種是下載安裝到本機端,另一種是直接在雲端執行。本文將介紹三個常見的開發工具及其安裝步驟。
Thumbnail
Python 作為一門廣泛應用的程式語言,提供了多種處理日期和時間的方法和函式庫。本文將介紹 Python 中日期和時間的處理方式,涵蓋基本概念、常用函數,並通過實例來說明其應用。
Thumbnail
本文將介紹如何在 Python 中讀取和寫入文本文件,以及如何處理文件操作過程中可能發生的異常,透過具體的程式碼範例來說明這些概念,讓你能夠清楚的理解並運用在實際的程式設計中。
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式