1. 程式人生 > >python解釋器遇到if __name__=="__main__"會如何做?

python解釋器遇到if __name__=="__main__"會如何做?

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__"會如何做?