1.對(duì)于C芝发、C++以及Java等編程語(yǔ)言來(lái)說(shuō),程序需要一個(gè)主入口,先將程序編譯為二進(jìn)制文件再運(yùn)行备燃,所以在學(xué)習(xí)C語(yǔ)言的時(shí)候首先都會(huì)寫(xiě)main字樣,也就是說(shuō)程序會(huì)從main函數(shù)開(kāi)始凌唬。而Python作為腳本語(yǔ)言并齐,對(duì)程序的編譯是逐行進(jìn)行的,所以不需要在最開(kāi)始就寫(xiě)上main客税。
2.一個(gè)python源碼文件(以.py為結(jié)尾的)可以被直接運(yùn)行况褪,也可以被導(dǎo)入,也就是常見(jiàn)的import方法更耻。這兩種方法都會(huì)執(zhí)行頂層的代碼测垛,但下層的部分代碼也許沒(méi)有必要運(yùn)行(但有存在的必要)。此時(shí)秧均,就可以引入該方法食侮。
3.每個(gè)Python源碼文件都含有內(nèi)置的變量__name__号涯,當(dāng)文件被作為腳本直接運(yùn)行時(shí),__name__ == 文件名(包含.py)锯七;當(dāng)文件被import到其他源碼文件時(shí)链快,__name__ == 文件名(不包含.py)。而__main__ == 當(dāng)前執(zhí)行文件的名稱(chēng)眉尸,所以當(dāng)文件被作為腳本直接運(yùn)行時(shí)域蜗,__name__ == __main__。
4.因此噪猾,if __name__ == '__main__'?就相當(dāng)于是 Python?模擬的程序入口地消。Python 本身并沒(méi)有規(guī)定這么寫(xiě),這只是一種編碼習(xí)慣畏妖。由于模塊之間相互引用脉执,不同模塊可能都有這樣的定義,而入口程序只能有一個(gè)戒劫。到底哪個(gè)入口程序被選中半夷,這取決于?__name__?的值。
參考:
1.Python 中的 if __name__ == '__main__' 該如何理解 ? ? ? ?