__name__特殊變數

if __name__ == '__main__'

在Python程式中,我們會經常看到在程式碼中有這樣的語句,

if __name__ == '__main__':
    xxxxxx

而且一般都是在程式碼的最後面出現。

__name__是一個特殊變數,使用者是沒有辦法自己給設定值的。它主要用於檢查模組是由自己執行還是由於import執行而執行。它可以避免模組在匯入時執行其程式碼的某些部分,所以加入了if __name__ == '__main__'。假如是被呼叫的情況,那麼if __name__ == '__main__'後面的程式碼就不會在呼叫的時候執行。

舉個例子,我們有兩個Python檔案,

Test_1.py

print('hello')

Test_2.py

import Test_1.py

我們把兩個檔案都執行下,Test_1.py會列印出hello,而Test_2.py也會列印出hello

我們把if __name__ == '__main__'加到Test_1.py裡面試下,

if __name__ == '__main__':
    print('hello')

然後我們把兩個檔案再次執行話,就會發現Test_1.py仍會列印出hello,而Test_2.py不會列印任何資訊出來了。

函式或者類的__name__

對應函式或者類來講,__name__特殊變數就是等於函式或者類名稱的字串。

def TestFunc():
    pass

class TestClass():
    pass

print(TestFunc.__name__)
#Out:TestFunc
print(TestClass.__name__)
#Out: TestClass

我們也可以用__name__來得到標準庫/模組的名字。

import numpy
print(numpy.__name__)
#Out: numpy

name在日誌logging中的使用

在配置日誌logging功能時,常見的一種形式就是是使用__name__來得到當前模組的名稱。

logger = logging.getLogger(__name__)

這意味著模組的名稱將會顯示在日誌中,從而更容易檢視訊息的來源。