不少新手剛開始學習python的時候常常會看到python 中__name__ = \'__main__\' 這樣的代碼,可能不少新手一開始學習的時候都比較疑惑,python 中__name__ = '__main__' 的做用,到底幹嗎的?python
有句話經典的歸納了這段代碼的意義:ide
「Make a script both importable and executable」函數
意思就是說讓你寫的腳本模塊既能夠導入到別的模塊中用,另外該模塊本身也可執行。學習
這句話,可能一開始聽的還不是很懂。下面舉例說明:調試
先寫一個模塊:ip
#module.py def main(): print "we are in %s"%__name__ if __name__ == '__main__': main()
這個函數定義了一個main函數,咱們執行一下該py文件發現結果是打印出」we are in __main__「,說明咱們的if語句中的內容被執行了,調用了main():it
可是若是咱們從另我一個模塊導入該模塊,並調用一次main()函數會是怎樣的結果呢?table
#anothermodle.py from module import main main()
其執行的結果是:we are in moduleclass
可是沒有顯示」we are in __main__「,也就是說模塊__name__ = '__main__' 下面的函數沒有執行。import
這樣既能夠讓「模塊」文件運行,也能夠被其餘模塊引入,並且不會執行函數2次。這纔是關鍵。
總結一下:
若是咱們是直接執行某個.py文件的時候,該文件中那麼」__name__ == '__main__'「是True,可是咱們若是從另一個.py文件經過import導入該文件的時候,這時__name__的值就是咱們這個py文件的名字而不是__main__。
這個功能還有一個用處:調試代碼的時候,在」if __name__ == '__main__'「中加入一些咱們的調試代碼,咱們能夠讓外部模塊調用的時候不執行咱們的調試代碼,可是若是咱們想排查問題的時候,直接執行該模塊文件,調試代碼可以正常運行!