__name__特殊變數

Jinku Hu 2023年1月30日 2018年7月23日
  1. if __name__ == '__main__'
  2. 函式或者類的 __name__
  3. __name__在日誌 logging 中的使用
__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__)

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

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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