What does if __name__ == “__main__”: do?

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

需求分析

如題:
代碼如下:

# Threading example
import time
import 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))

Answers

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

python threading_example.py

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

注: 如果將代碼放在函數定義之前, 它將在 __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. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章