在 Python 程式碼中常常會看到這行:
最簡單來說,就是要判斷程式是直接執行還是被(當作套件)引用。
在 Python 官方文件中有定義 Python 的命名風格,使用 Dunder(Double Underline, 兩條底線)命名的變數是指在模組層級被定義的特殊屬性。 __main__ 就是預設有的變數,內容是儲存「頂層程式碼的環境名稱」。
假設有一個 a.py 的檔案如下:
使用指令執行這個檔案:
輸出的內容會是
假設我們建立一個 b.py,印出自己的 __name__ 和 a.py 中的 __name__
一樣使用指令執行 b.py 檔案:
輸出結果:
會發現只有自己本身的 __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
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
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com