Python 解釋 if __name__ == '__main__':

在 Python 程式碼中常常會看到這行:
    
if __name__ == '__main__':
    print("Hello World")
    

最簡單來說,就是要判斷程式是直接執行還是被(當作套件)引用。

Python 官方文件中有定義 Python 的命名風格,使用 Dunder(Double Underline, 兩條底線)命名的變數是指在模組層級被定義的特殊屬性。 __main__ 就是預設有的變數,內容是儲存「頂層程式碼的環境名稱」。

假設有一個 a.py 的檔案如下:
    
print(f"a.py: __name__: {__name__}")
    

使用指令執行這個檔案:
    
py a.py
    

輸出的內容會是
    
a.py: __name__: a
    

假設我們建立一個 b.py,印出自己的 __name__ 和 a.py 中的 __name__
    
import a

print(f"__name__: {__name__}")
print(f"a.__name__: {a.__name__}")

    

一樣使用指令執行 b.py 檔案:
    
py b.py
    

輸出結果:
    
a.py: __name__: a
__name__: __main__
a.__name__: a
    

會發現只有自己本身的 __name__ 是 __main__ ,而不論在 a.py 中的 __name__ 或是在 b.py 中讀取到的 a.__name__ 都是 .py 檔案的名稱 a 。

所以我們就可以用這個來判斷說我們是不是主要被執行的程式,還是被當成套件引用,就可以依照不同的情境執行不同的程式碼。

參考資料:
Python.docs - __main__ — Top-level code environment
PEP 8 – Style Guide for Python Code

留言