python解釋器遇到if __name__=="__main__"會如何做?
阿新 • • 發佈:2019-02-14
if語句 tty left 特殊 創建 模塊 如何 .py ase
python解釋器遇到if __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解釋器將該模塊(源文件)作為主程序運行,則它將特殊__name__變量設置為"__main__"。如果從另一個模塊導入此文件,__name__則將其設置為模塊的名稱。
在這個腳本的情況下,讓我們假設它作為主要功能執行
python threading_example.py
在命令行上,設置特殊變量後,它將執行import語句並加載這些模塊。然後它將評估def塊,創建一個函數對象並創建一個myfunction指向函數對象的變量。然後它將讀取該if語句並看到它__name__確實相等"__main__",因此它將執行那裏顯示的塊。
這樣做的一個原因是,有時您可以編寫一個.py可以直接執行的模塊(文件)。或者,它也可以導入並在另一個模塊中使用。您可以僅在希望將模塊作為程序運行時執行該代碼,而在有人只想導入模塊並自行調用函數時不執行該代碼。
註意:如果將代碼放在函數定義之前,它將在__name__檢查之前執行。
print("This code executes before main.") def functionA(): print("Function A") def functionB(): print("Function B") if __name__ == ‘__main__‘: functionA() functionB()
如果此模塊確實用作主腳本,則此代碼將導致:
This code executes before main. Function A Function B
如果導入此模塊而不是用作主腳本,則在導入時獲得以下內容:
This code executes before main.
本文轉載自:python黑洞網 原文鏈接:http://www.pythonheidong.com/blog/article/30/
python解釋器遇到if __name__=="__main__"會如何做?