如何理解if __name__ == ‘__main__’
阿新 • • 發佈:2022-04-05
Python初學者在學習程式碼時常常會看到if __name__== ‘__main__’:
這樣的程式碼,這個是什麼意思呢?
Python中有很多內建變數和內建方法(也稱魔術變數/魔術方法),為了避免和使用者的變數衝突,內建變數和內建方法通常以兩個下劃線開頭和結尾。
常見的內建變數有:
-
__file__
: 表示當前檔案(路徑) -
__package__
:當前檔案所在包名 -
__name__
:當前模組名 -
__cached__
: 當前快取路徑 -
__buildins__
: 所有的內建方法(字典)
注意這些都是正常的變數,使用時不加引號。
內建(魔術)方法就更多,如__init__
、__str__
__get_attr__
等等。
所以,if __name__ == ‘__main__’:
是判斷當前模組名是不是字串’__main__’
。
我們知道Python中每個檔案(模組)都可以匯入其他模組。
當前執行的檔案(模組)被稱為主模組,此時其模組名__name__
為字串’__main__‘
。
而其他匯入的模組的模組名__name__
則為匯入的模組名(匯入路徑+檔名去掉.py)。
例如, 有兩個檔案a.py和b.py,a中匯入b模組執行,程式碼如下:
b.py程式碼
print(‘我是b模組,我的模組名為’, __name__) if __name__ == ‘__main__’: print(‘只有我自己執行時才會列印,別人匯入我時不會列印’)
a.py程式碼
import b
print(‘我是a模組,我的模組名為‘, __name__)
執行a.py後列印結果為:
我是b模組,我的模組名為 b
我是a模組,我的模組名為 __main__
這裡我們可以看到a模組是主模組,及執行的是a.py檔案。b.py中if __name__==‘__main__’:
中的程式碼沒有列印。
如果我們執行b.py,則會列印if __name__==‘__main__’:
中的程式碼,執行結果如下:
我是b模組,我的模組名為 __main__
只有我自己執行時才會列印,別人匯入我時不會列印
因此 if __name__ == ‘__main__’:
也稱為模組私有程式碼, 常用作測試當前模組使用,並且不影響別的模組匯入使用。