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

有句話經典的歸納了這段代碼的意義:函數

「Make a script both importable and executable」spa

意思就是說讓你寫的腳本模塊既能夠導入到別的模塊中用,另外該模塊本身也可執行.net

這句話,可能一開始聽的還不是很懂。下面舉例說明:調試

先寫一個模塊:code

?
1
2
3
4
5
#module.py
def main():
   print "we are in %s" % __name__
if __name__ = = '__main__' :
   main()

這個函數定義了一個main函數,咱們執行一下該py文件發現結果是打印出」we are in __main__「,說明咱們的if語句中的內容被執行了,調用了main():htm

可是若是咱們從另我一個模塊導入該模塊,並調用一次main()函數會是怎樣的結果呢?ip

?
1
2
3
#anothermodle.py
from module import main
main()

其執行的結果是:we are in moduleci

可是沒有顯示」we are in __main__「,也就是說模塊__name__ = '__main__' 下面的函數沒有執行。get

這樣既能夠讓「模塊」文件運行,也能夠被其餘模塊引入,並且不會執行函數2次。這纔是關鍵。string

總結一下:

若是咱們是直接執行某個.py文件的時候,該文件中那麼」__name__ == '__main__'「是True,可是咱們若是從另一個.py文件經過import導入該文件的時候,這時__name__的值就是咱們這個py文件的名字而不是__main__。

這個功能還有一個用處:調試代碼的時候,在」if __name__ == '__main__'「中加入一些咱們的調試代碼,咱們能夠讓外部模塊調用的時候不執行咱們的調試代碼,可是若是咱們想排查問題的時候,直接執行該模塊文件,調試代碼可以正常運行!

相關文章
相關標籤/搜索