淺析python 中__name__ = '__main__' 的做用

不少新手剛開始學習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__'「中加入一些咱們的調試代碼,咱們能夠讓外部模塊調用的時候不執行咱們的調試代碼,可是若是咱們想排查問題的時候,直接執行該模塊文件,調試代碼可以正常運行!

相關文章
相關標籤/搜索