1. 前言
在 Python 程式中常見的「if name == ‘main‘」語法,是用來判斷腳本執行方式的重要功能。透過這個語法,我們可以根據程式是「直接執行」還是「被其他腳本匯入」來決定不同的執行行為。
正確理解這個功能,能提升程式碼的重複利用性與可維護性,並且讓除錯與測試變得更有效率。本文將透過具體的程式碼範例,詳細說明這個語法的用途、寫法與其帶來的好處。
2. 基本理解:Python 中的 name 與 main
什麼是 Python 的特殊變數 name?
當 Python 程式被執行時,系統會自動產生一些特殊變數,__name__
就是其中之一。這個變數會儲存目前正在執行的檔案(模組)的名稱。通常,__name__
的作用是顯示「這段程式是從哪個模組開始執行的」。
補充說明:模組與腳本的差異
模組:包含 Python 程式碼的檔案,可被其他檔案匯入並重複使用。
腳本:用來直接執行的 Python 檔案,通常不被其他檔案匯入使用。
範例:name 的行為
假設有一個名為 example.py
的檔案,其內容如下:
# example.py
print(__name__)
當你直接執行這個檔案時,__name__
的值會是 '__main__'
,終端機上會顯示以下內容:
__main__
但如果你從其他檔案中匯入這個檔案,__name__
的值就會變成檔案名稱 'example'
,而不再是 __main__
。這表示在 Python 中,__name__
的值會根據執行方式而改變。
什麼是 main?
Python 直譯器會自動將被直接執行的檔案指定一個特別的名稱:__main__
。這讓 Python 程式能夠透過檢查 __name__
是否為 __main__
,來判斷是否是直接執行中的腳本。

3. if name == ‘main‘ 的具體用法
使用「if name == ‘main‘」語法,可以讓 Python 腳本在「直接執行」時才執行特定的程式碼。這個語法在控制程式行為方面非常有用。
基本語法
if __name__ == '__main__':
# 只有當腳本被直接執行時,這段程式才會執行
print("這個腳本是被直接執行的。")
具體範例
以下是檔案 calculate.py
的範例程式碼。這個檔案包含一個函式與條件判斷語句:
# calculate.py
def add(a, b):
return a + b
if __name__ == '__main__':
result = add(3, 4)
print("計算結果:", result)
執行結果
當你直接執行這個檔案時,會輸出以下結果:
計算結果: 7
但如果從其他檔案匯入這個 calculate
模組,則 if __name__ == '__main__'
以下的程式碼不會被執行。以下是一個從另一個檔案 main_script.py
匯入並使用的範例:
# main_script.py
import calculate
# 匯入 calculate.py 時,不會執行 if __name__ == '__main__' 以下的程式碼
print(calculate.add(10, 5)) # 輸出結果為 15
透過這種方式,可以確認使用「if name == ‘main‘」語法時,腳本在「直接執行」與「被匯入」兩種情況下會有不同的行為。
4. 使用這個語法的優點
1. 提高模組的重用性
使用「if name == ‘main‘」可以有效提升模組的重用性。當模組被匯入時,可以避免不必要的程式碼被執行,僅執行所需的部分,有助於維護與管理程式。
2. 減少測試時的干擾
將測試程式碼或除錯程式碼放在 if __name__ == '__main__'
區塊中,可以在開發過程中輕鬆進行測試。同時,當模組被匯入時,這些測試程式碼不會被執行,有助於保持程式的整潔與穩定。
測試程式碼範例
我們可以在 calculate.py
中加入簡單的測試程式碼如下:
# calculate.py
def add(a, b):
return a + b
if __name__ == '__main__':
# 測試程式碼
print("3 + 4 =", add(3, 4))
print("10 + 5 =", add(10, 5))
這樣設計可以確保只有在直接執行該檔案時才會進行測試;而當模組被匯入到其他程式中時,則不會執行測試部分,僅提供所需的函式功能。

5. 注意事項與最佳實踐
注意事項
- 讓程式碼更清晰易懂
透過將測試程式或執行程式碼放入if __name__ == '__main__'
區塊中,可以明確區分每個程式碼段的用途。這樣可以避免在匯入模組時,誤執行不必要的程式內容。 - 注意循環匯入的問題
當多個檔案之間互相匯入,並使用if __name__ == '__main__'
區塊時,容易導致循環匯入(Circular Import)問題。為避免此情況,建議保持模組之間的依賴關係簡單清晰。
最佳實踐
- 將測試程式碼寫在 main 區塊中
將測試用程式碼放在if __name__ == '__main__'
裡面,可以避免模組被匯入時執行測試程式碼,只有在需要時才手動執行,有效降低錯誤發生的機率。 - 集中管理函式呼叫
在if __name__ == '__main__'
區塊中統一呼叫必要的函式,可以讓主程式更有條理,也方便未來維護與修改。
6. 總結
「if name == ‘main‘」 是 Python 中一個實用的語法,可以用來判斷腳本的執行方式。藉由這個語法,我們可以只在「直接執行」腳本時執行特定程式碼,進而提升模組的重用性與測試的效率。
在進行 Python 開發時,靈活運用這個語法,清楚區分「可重用模組」與「主程式的執行邏輯」,將能讓你的程式碼更具可維護性與結構性。