1. 程式人生 > 其它 >如何理解if __name__ == ‘__main__’

如何理解if __name__ == ‘__main__’

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__’:

可以用來判斷是從當前檔案執行的,如果是當前模組才執行if裡面的程式碼。
也稱為模組私有程式碼, 常用作測試當前模組使用,並且不影響別的模組匯入使用。