對于Python初學者來說,在看別人代碼時經(jīng)常會看到if __name__ == "__main__",對于剛接觸python的我們來說,不太明白這個代碼的作用,也許我們一直在用,但是其實很多人并沒有詳細去了解過這段代碼的意義。
這里,讓我們來看看這句代碼到底有何意義,又該在何種情境下使用?
python文件執(zhí)行的兩種方法:
一個python文件通常有兩種使用方法,第一是作為腳本直接執(zhí)行,第二是 import 到其他的 python 腳本中被調(diào)用(模塊重用)執(zhí)行。因此if __name__ == 'main': 的作用就是控制這兩種情況執(zhí)行代碼的過程,在if __name__ == 'main': 下的代碼只有在第一種情況下(即文件作為腳本直接執(zhí)行)才會被執(zhí)行,而 import 到其他腳本中是不會被執(zhí)行的。舉例說明如下:
只要你創(chuàng)建了一個模塊(一個.py文件),這個模塊就有一個內(nèi)置屬性name生成,該模塊的 name 的值取決于如何應用這個模塊。說人話就是,如果你直接運行該模塊,那么__name__ == "__main__";如果你 import 一個模塊,那么模塊name 的值通常為模塊文件名。
如,創(chuàng)建一個test1.py:
def func():
print('hello, world!')
if __name__ == "__main__":
func()
模塊中,首先定義了函數(shù)func(),用來打印出hello, world!,然后判斷__name__是否等于 __main__,如果等于,有打印,反之則反,現(xiàn)在運行該模塊,結果為:
hello, world!
說明__name__ 等于__main__。
這時,輸入代碼:
再創(chuàng)建一個test2.py:
import test1
print('bye, world!')
模塊中,首先import test1,然后打印bye, world!做測試用,運行該模塊,結果為:
bye, world!
運行結果僅有bye, world!,說明__name__不等于__main__。
通過上面test1.py和test2.py兩個模塊,我們現(xiàn)在可以得出一個非常實用的結論:
如果模塊是被直接運行的,則代碼塊被運行,如果模塊被import,則代碼塊不被運行。