基本概念
if __name__ == '__main__':
?是一個條件判斷語句,用于確定當前模塊是作為主程序運行,還是被其他模塊導入。
__name__
?變量
__name__
?是Python的一個內置變量,表示當前模塊的名稱- 當一個模塊被直接運行時,
__name__
?的值會被設置為?'__main__'
- 當一個模塊被導入到其他模塊中時,
__name__
?的值就是模塊的文件名(不含.py后綴)
這個結構的主要用途有:
- ?模塊的雙重用途?:讓一個文件既可以作為可執行腳本,也可以作為可導入模塊
- ?防止導入時執行不必要的代碼?:避免模塊被導入時自動執行測試代碼或主程序邏輯
使用示例
# my_module.pydef some_function():print("這是一個函數")if __name__ == '__main__':print("作為主程序運行")some_function()
else:print("被導入為模塊")
直接運行時的輸出
作為主程序運行
這是一個函數
被其他模塊導入時的輸出
被導入為模塊
實際應用場景
- ?測試代碼?:在模塊底部添加測試代碼,只有直接運行時才執行
- ?腳本入口?:明確程序的入口點
- ?避免副作用?:防止導入時執行不必要的初始化操作
最佳實踐
- 在編寫可重用模塊時,應該使用這個結構
- 主程序邏輯放在這個條件塊中
- 函數和類定義通常放在這個條件塊之外
類似用法
在Python包中,__main__.py
文件也有類似的作用,當使用python -m package
運行時,會執行__main__.py
中的代碼。
這個結構是Python模塊化編程的重要部分,幫助開發者編寫更清晰、更可維護的代碼。