問題:
__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。當設定完特殊變數,它會執行如下幾個步驟:
- 執行 import 語句,載入模組;
- 評估 def 區域,創造一個函式物件以及一個指向它的變數 myfunction;
- 讀取 if 語句,看到 __name__ 和 "__main__" 相等,然後執行其中的程式碼。
這麼做的原因在於,有時候你寫了一個模組(.py檔案),它既可以直接執行,又可以被引入到其他模組中執行。通過執行 main 檢查,有兩個好處:
- 當你想將該模組作為程式執行時才執行程式碼;
- 當某人只想匯入模組並自行呼叫函式時,不會執行該程式碼。
該問答來源:
https://stackoverflow.com/questions/419163/what-does-if-name-main-do