__name__特殊變數

Jinku Hu 2023年1月30日
  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__)

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

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook