What does if __name__ == 「__main__」: do?

微信公衆號:stackflow
若有問題或建議,請公衆號留言
Question:https://stackoverflow.com/questions/419163/
最近更新:2018-12-29html

需求分析

如題:
代碼以下:python

 1# Threading example
2import time
3import thread
4
5def myfunction(string, sleeptime, lock, *args):
6    while True:
7        lock.acquire()
8        time.sleep(sleeptime)
9        lock.release()
10        time.sleep(sleeptime)
11
12if __name__ == "__main__":
13    lock = thread.allocate_lock()
14    thread.start_new_thread(myfunction, ("Thread #: 1"2, lock))
15    thread.start_new_thread(myfunction, ("Thread #: 2"2, lock))
複製代碼

Answers

當python解釋器運行源代碼時, 它將執行全部能找到的代碼。
在代碼執行前,解釋器會定義幾個特定的變量。例如,若是解釋器將該模塊 (源文件) 做爲主程序運行, 會設置__name__ == '__main__'。若是此文件是從另外一個模塊導入的, 則__name__將設置爲模塊的名稱。
示例中的代碼,假設是做爲主函數來運行,即微信

1python threading_example.py
複製代碼

設置特殊變量後, 它將執行導入語句並加載這些模塊。而後, 它將計算def塊, 建立一個函數對象, 並建立一個名爲 myfunction 的變量, 指向該函數對象。而後, 它將讀取 if 語句, 並看到 __name__ 確實等於 "__main__", 所以它將執行顯示在其中的代碼塊。
這樣作的一個緣由是, 有時編寫一個模塊 (a.py), 能夠直接執行。或者, 也能夠在另外一個模塊中導入和使用它。經過執行主程序檢查, 你但願只將模塊做爲程序運行時執行該代碼, 而不是在有人只想要導入你的模塊並調用函數時執行該代碼。
More 有更多解釋app

注: 若是將代碼放在函數定義以前, 它將在 __name__以前執行。函數

 1print("This code executes before main."
2
3def functionA():
4    print("Function A")
5
6def functionB():
7    print("Function B")
8
9if __name__ == '__main__':
10    functionA()
11    functionB()
複製代碼

做爲主函數執行的輸出以下:ui

1This code executes before main. 
2Function A 
3Function B
複製代碼

若是導入此模塊而不是用做主函數, 則在導入時將輸出如下內容:spa

1This code executes before main. 
複製代碼
相關文章
相關標籤/搜索