python:淺析python 中__name__ = '__main__' 的做用(轉載)

轉自:http://www.cnblogs.com/alan-babyblog/p/5147770.html#undefinedhtml

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

「Make a script both importable and executable」spa

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

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

先寫一個模塊:htm

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

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

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

#anothermodle.py
from module import main
main()

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

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

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

總結一下:

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

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

相關文章
相關標籤/搜索