淺析python 中__name__ = '__main__' 的作用
很多新手剛開始學(xué)習(xí)python的時(shí)候經(jīng)常會(huì)看到python 中__name__ = \'__main__\' 這樣的代碼,可能很多新手一開始學(xué)習(xí)的時(shí)候都比較疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的?
有句話經(jīng)典的概括了這段代碼的意義:
“Make a script both importable and executable”
意思就是說(shuō)讓你寫的腳本模塊既可以導(dǎo)入到別的模塊中用,另外該模塊自己也可執(zhí)行。
這句話,可能一開始聽的還不是很懂。下面舉例說(shuō)明:
先寫一個(gè)模塊:
#module.py def main(): print "we are in %s"%__name__ if __name__ == '__main__': main()
這個(gè)函數(shù)定義了一個(gè)main函數(shù),我們執(zhí)行一下該py文件發(fā)現(xiàn)結(jié)果是打印出”we are in __main__“,說(shuō)明我們的if語(yǔ)句中的內(nèi)容被執(zhí)行了,調(diào)用了main():
但是如果我們從另我一個(gè)模塊導(dǎo)入該模塊,并調(diào)用一次main()函數(shù)會(huì)是怎樣的結(jié)果呢?
#anothermodle.py from module import main main()
其執(zhí)行的結(jié)果是:we are in module
但是沒有顯示”we are in __main__“,也就是說(shuō)模塊__name__ = '__main__' 下面的函數(shù)沒有執(zhí)行。
這樣既可以讓“模塊”文件運(yùn)行,也可以被其他模塊引入,而且不會(huì)執(zhí)行函數(shù)2次。這才是關(guān)鍵。
總結(jié)一下:
如果我們是直接執(zhí)行某個(gè).py文件的時(shí)候,該文件中那么”__name__ == '__main__'“是True,但是我們?nèi)绻麖牧硗庖粋€(gè).py文件通過(guò)import導(dǎo)入該文件的時(shí)候,這時(shí)__name__的值就是我們這個(gè)py文件的名字而不是__main__。
這個(gè)功能還有一個(gè)用處:調(diào)試代碼的時(shí)候,在”if __name__ == '__main__'“中加入一些我們的調(diào)試代碼,我們可以讓外部模塊調(diào)用的時(shí)候不執(zhí)行我們的調(diào)試代碼,但是如果我們想排查問(wèn)題的時(shí)候,直接執(zhí)行該模塊文件,調(diào)試代碼能夠正常運(yùn)行!
相關(guān)文章
對(duì)python3 Serial 串口助手的接收讀取數(shù)據(jù)方法詳解
今天小編就為大家分享一篇對(duì)python3 Serial 串口助手的接收讀取數(shù)據(jù)方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Appium+Python+pytest自動(dòng)化測(cè)試框架的實(shí)戰(zhàn)
本文主要介紹了Appium+Python+pytest自動(dòng)化測(cè)試框架的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12PyCharm-錯(cuò)誤-找不到指定文件python.exe的解決方法
今天小編就為大家分享一篇PyCharm-錯(cuò)誤-找不到指定文件python.exe的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python操作Sonqube API獲取檢測(cè)結(jié)果并打印過(guò)程解析
這篇文章主要介紹了Python操作Sonqube API獲取檢測(cè)結(jié)果并打印過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11python 動(dòng)態(tài)遷移solr數(shù)據(jù)過(guò)程解析
這篇文章主要介紹了python 動(dòng)態(tài)遷移solr數(shù)據(jù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Python中xlsx文件轉(zhuǎn)置操作詳解(行轉(zhuǎn)列和列轉(zhuǎn)行)
很多時(shí)候我們處理的Excel表格并不是我們想要的樣子,需要將表格的形式進(jìn)行相應(yīng)轉(zhuǎn)換后進(jìn)行數(shù)據(jù)分析操作,下面這篇文章主要給大家介紹了關(guān)于Python中xlsx文件轉(zhuǎn)置操作(行轉(zhuǎn)列和列轉(zhuǎn)行)的相關(guān)資料,需要的朋友可以參考下2022-07-07Python圖像處理之gif動(dòng)態(tài)圖的解析與合成操作詳解
這篇文章主要介紹了Python圖像處理之gif動(dòng)態(tài)圖的解析與合成操作,結(jié)合實(shí)例形式分析了Python基于PIL模塊解析gif文件,以及基于imageio庫(kù)合成gif文件的相關(guān)操作技巧,需要的朋友可以參考下2018-12-12解決Keras的自定義lambda層去reshape張量時(shí)model保存出錯(cuò)問(wèn)題
這篇文章主要介紹了解決Keras的自定義lambda層去reshape張量時(shí)model保存出錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Python自動(dòng)化實(shí)戰(zhàn)之接口請(qǐng)求的實(shí)現(xiàn)
本文為大家重點(diǎn)介紹如何通過(guò) python 編碼來(lái)實(shí)現(xiàn)我們的接口測(cè)試以及通過(guò)Pycharm的實(shí)際應(yīng)用編寫一個(gè)簡(jiǎn)單接口測(cè)試,感興趣的可以了解一下2022-05-05Python疫情確診折線圖實(shí)現(xiàn)數(shù)據(jù)可視化實(shí)例詳解
數(shù)據(jù)可視化是指用圖形或表格的方式來(lái)呈現(xiàn)數(shù)據(jù)。圖表能夠清楚地呈現(xiàn)數(shù)據(jù)性質(zhì),?以及數(shù)據(jù)間或?qū)傩蚤g的關(guān)系,可以輕易地讓人看圖釋義。用戶通過(guò)探索圖(Exploratory?Graph)可以了解數(shù)據(jù)的特性、尋找數(shù)據(jù)的趨勢(shì)、降低數(shù)據(jù)的理解門檻2022-09-09