在 Python 中,if __name__ == '__main__':
是一個常見的代碼模式,用于控制模塊的執行行為。它的核心作用是區分模塊是被直接運行還是被導入到其他文件中。
作用詳解:
?當文件被直接運行時?
__name__
會被自動設置為'__main__'
,此時if
塊內的代碼會執行。?當文件被導入時?
__name__
會變成模塊的名稱(即文件名),此時if
塊內的代碼不會執行。
實際用途:
1. 防止導入時執行測試代碼
# mymodule.py
def useful_function():print("This is useful!")# 測試代碼(只在直接運行時執行)
if __name__ == '__main__':print("Running tests...")useful_function()
直接運行
python mymodule.py
→ 輸出測試結果其他文件導入
import mymodule
→ 不會觸發測試代碼
2. 創建可復用模塊
# utils.py
def helper():print("Helper function")if __name__ == '__main__':# 直接運行時提供命令行操作print("Running in CLI mode")helper()
作為模塊導入時:只提供
helper()
函數直接運行時:變成命令行工具
3. 分離代碼邏輯
# main.py
import data_processordata = load_data()
processed = data_processor.process(data) # 導入時不觸發執行if __name__ == '__main__':save_results(processed) # 只有直接運行時保存結果
技術原理:
Python 解釋器在運行文件時,會創建一個特殊變量
__name__
直接運行時:
__name__ = "__main__"
被導入時:
__name__ = "模塊名"
(如"mymodule"
)
最佳實踐:
? 將腳本的入口代碼放在 if __name__ == '__main__':
下
? 模塊的核心功能定義在外部函數中
? 避免在模塊頂層寫直接執行的代碼(除非明確需要)
📌 ?關鍵總結?:這個結構讓 Python 文件既能作為獨立程序運行,又能作為模塊被安全導入,是 Python 模塊化編程的基礎設計模式。