python:if __name__ == '__main__' 理解與使用

對於剛接觸python的初學者來說,經常會發現一些python代碼文件最後會有這麼一段

if __name__ == '__main__' :
    main()
    ....

那麼這句話是什麼意思呢?

有句話經典的概括了這段代碼的含義: “Make a script both importable and executable”

意思就是說讓你寫的腳本模塊既可以導入到別的模塊中用,另外該模塊自己也可執行。這句話,可能一開始聽的還不是很懂。

通俗的理解__name__ == '__main__':

假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');

                               在你自己眼中,你是你自己(__name__ == '__main__')。

if __name__ == '__main__'的意思是:

當.py文件被直接運行時,if __name__ == '__main__'之下的代碼塊將被運行;

當.py文件以模塊形式被導入時,if __name__ == '__main__'之下的代碼塊不被運行。

下面我們舉例來說明。

先寫一個模塊(或者說第一個.py文件)

# first.py

def main():
    print('we are in %s' % __name__)

if __name__ == '__main__':
    main()
    print('-----------ending---------')

直接運行first.py文件,運行結果是:

we are in __main__
-----------ending---------

通過運行結果,我們可以分析出:

       當我們直接運行first.py文件,__name__的值就是 __main__。也就是上文所說的“在你自己眼中,你就是你自己

然後我們再寫另一個模塊(或者說另一個.py文件)

# second.py

from first import main    # 將first.py文件以模塊形式導入sencond.py文件
main()    # 調用first.py文件中的main方法

我們運行second.py文件,運行結果是:

we are in first

通過運行結果,我們可以分析出:

一、當我們將first.py文件以模塊形式導入sencond.py文件,__name__的值就是 first。也就是上文所說的“在你朋友(second)的眼中,你是你(first)

二、我們發現 first.py文件中的if語句之後的代碼沒有被運行,因爲此時的__name__是first,而不是__main__。

總結:

如果我們是直接執行某個.py文件的時候,該文件中那麼”__name__ == '__main__'“是True,但如果我們從另外一個.py文件通過import導入該文件的時候,這時__name__的值就是我們這個py文件的名字而不是__main__。

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章