__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__)
這意味著模組的名稱將會顯示在日誌中,從而更容易檢視訊息的來源。
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn