__name__ == "__main__"的作用是什麼?

Shengjie發表於2018-09-03

問題:
__name__ == "__main__" 的作用是什麼?

# Threading example
import time, thread

def myfunction(string, sleeptime, lock, *args):
    while True:
        lock.acquire()
        time.sleep(sleeptime)
        lock.release()
        time.sleep(sleeptime)

if __name__ == "__main__":
    lock = thread.allocate_lock()
    thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
    thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))

回答:
當 Python 編譯器(Python interpreter)讀取了原始檔,它會執行其中的所有程式碼。

在執行程式碼之前,它會定義幾個特殊變數。舉例來說,如果 Python 編譯器將那個模組(原始檔)當作主程式來執行,那麼它會將變數 __name__ 的值設為 "__main__"。如果這個原始檔是從其他模組匯入(import)的,變數 __name__ 會被設為模組名。

在你的案例中,讓我們假設這是作為主函式來執行。例如,在命令列上輸入 python threading_example.py。當設定完特殊變數,它會執行如下幾個步驟:

  1. 執行 import 語句,載入模組;
  2. 評估 def 區域,創造一個函式物件以及一個指向它的變數 myfunction
  3. 讀取 if 語句,看到 __name__"__main__" 相等,然後執行其中的程式碼。

這麼做的原因在於,有時候你寫了一個模組(.py檔案),它既可以直接執行,又可以被引入到其他模組中執行。通過執行 main 檢查,有兩個好處:

  1. 當你想將該模組作為程式執行時才執行程式碼;
  2. 當某人只想匯入模組並自行呼叫函式時,不會執行該程式碼。

該問答來源:

https://stackoverflow.com/questions/419163/what-does-if-name-main-do

相關文章