python中if __name__ == "__main__"到底有什麼作用?

Python沒有像Java、C、C++那樣定義程序的執行入口,在python中,程序是從上到下逐行編譯的。Python解釋器從文件的第一行開始執行程序中的def和class語句創建函數和類對象,這些對象由代碼和原數據組成,且這些代碼和數據在顯示調用之前不會運行。

首先我們來看一下__name__,__name__是python文件的一個特殊屬性,名稱兩邊的雙下劃線稱爲dunders,是特殊方法的意思。python中每個模塊都有一個名稱,模塊的名稱可以在模塊的程序語句中找到。python的每個模塊可以作爲庫導入其他函數也可以單純作爲腳本運行,我們先通過一個示例瞭解兩者的區別。

我們寫一個簡單的my_script.py

if __name__ == '__main__':
    print ('This program is being run by itself')
else:
    print ('I am being imported from another module')

這是兩種方式下的運行結果

$ python my_script.py
This program is being run by ifself
$ python
>>> import my_script
I am being imported from another module
>>>

第一種是作爲一個腳本運行,第二種是作爲一個庫運行,通過這個結果我們知道,當程序單獨作爲腳本運行時其name屬性是"__main__",而作爲庫時name屬性是庫的名字。

所以說__name__ == "__main__"將程序定義功能和執行功能分開,理想情況下,從命令行調用時,幾乎每個Python模塊都可以執行相應操作。在許多情況下,如果特定文件定義僅在系統的其他組件中使用或者作爲測試執行腳本時,則可以使用__name__ == "__main__"隔離代碼塊來區別腳本的不同功能屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章