作者介紹:
一個痴迷於Python語言的業餘程式猿,經過半年苦練,經歷過從入門到放棄,現在慶幸走到痴迷於Python狀態。未來的理想是能夠與一群痴迷於Python語言的程式猿做有意義的事。
知乎專欄|戀習Python連結:https://www.zhihu.com/people/cai-niao-fen-xi-64/activities
相信初學者在學習Python的過程中,不可避免的總會遇到
if __name__ == ‘main’陳述句,雖然一直知道它的作用,但是可能一直比較模糊,今天菜鳥分析就與大家一起舉例說說我的理解。
舉個例子,我們在下麵在test.py中寫入如下程式碼:
print('戀習Python')
def main():
print('戀習Python')
if __name__ == '__main__':
main()
print('跟著菜鳥分析,練習Python越練越戀')
執行程式碼,則輸出結果為:
然後,在同一檔案夾新建名稱為import_test.py的指令碼,只輸入程式碼:
import test
執行程式碼,則輸出結果為:
與之前test.py程式碼執行結果比較,只有輸出戀習Python,也就是if __name__==”__main__”: 之前的陳述句被執行,之後的沒有被執行。
這是為什麼呢?別急,菜鳥分析繼續給你舉例子說明,絕對讓你滿意為止,最後有一種豁然開朗的感覺。
現在,我們在test.py指令碼的if __name__==”__main__”:之前加入print __name__,即將__name__打印出來,則最後執行結果如下:
可以看出,此時變數__name__的值為”__main__”。
再執行import_test.py,模組內容和執行結果如下:
此時,import_test.py中的__name__變數值為test,不滿足__name__==”__main__”的條件,因此,無法執行其後的程式碼。
哈哈,是不是一下明白啦,覺得不錯,給菜鳥分析點個贊哦!
再仔細想想,其執行原理也就是:
由於每個python模組(python檔案)都包含內建的變數__name__,當執行模組被執行的時候,__name__等於檔案名(包含了字尾.py)。如果import到其他模組中,則__name__等於模組名稱(不包含字尾.py)。而“__main__”等於當前執行檔案的名稱(包含了字尾.py)。所以當模組被直接執行時,__name__ == ‘__main__’結果為真;而當模組被import到其他模組中時,__name__ == ‘__main__’結果為假,就是不呼叫對應的方法。
簡而言之就是:__name__ 是當前模組名,當模組被直接執行時模組名為 __main__ 。當模組被直接執行時,程式碼將被執行,當模組是被匯入時,程式碼不被執行。