有時候經(jīng)常看到 python 代碼中含有 if __name__ == '__main__' 的代碼 ,但是卻一直不知道是什么意思,可以通過相應(yīng)的代碼去試驗即可知道其作用。
一、 理解
? ? ? ?我們知道每個python文件既可以被直接執(zhí)行,則可以作為腳本導入到其他文件中。從而構(gòu)建各個模塊的聯(lián)系。而 if__name__ == '__main__' 的作用也是用來區(qū)分是自己作為自己的文件進行執(zhí)行的,還是被導入到其他文件當做腳本使用。為了更好的區(qū)分,看如下例子:
? ?? 步驟一 :?新建一個文件為: test.py 的文件,文件內(nèi)容為:
? ?步驟二 :如果將上述作為一個自己的腳本,即直接對上述腳本進行運行,則輸出為如下內(nèi)容:
? 結(jié)論1 :由上可知,直接作為腳本運行,則其文件內(nèi)的所有內(nèi)容都會被執(zhí)行,包括 if __name == '__main__'前后的所有內(nèi)容。
此時內(nèi)置的 __name__ 屬性即為 "__main__"? 。即由此可知,當運行自己這個文件時,內(nèi)置的屬性__name__ 即為__main__
? ?步驟三: 在上述 test.py 文件的同級目錄下 再新建一個文件為 import_test.py 的文件,其內(nèi)部的內(nèi)容為:
? ? ? ? ? ? ? ? ?【注:這個文件把上述的文件進行了導入 上述文件名為test.py ,但作為導入模塊時,導入為test 沒有后綴.py】
? ?步驟四: 執(zhí)行 import.py 文件,則運行結(jié)果為如下:
結(jié)論2:由上可知,當test.py 作為腳本被導入到import_test.py文件內(nèi)時,test.py文件里?if __name__ == '__main__'外部的內(nèi)容都被執(zhí)行了,而其內(nèi)部的內(nèi)容沒有被執(zhí)行,因為結(jié)果可知,此時test.py作為腳本導入到其他文件時被執(zhí)行時的__name__已經(jīng)不是原來自己執(zhí)行自己的__main__了,而是變成了它自己的模塊名,即__name__ = 'test' 【沒后綴】,而非__main__了。索引被導入執(zhí)行的代碼的__name__不滿足原來的條件。而import_test.py內(nèi)部的if __name__ = '__main__' 則會被執(zhí)行,因為它是執(zhí)行自己的代碼。而非導入到其他文件內(nèi)被執(zhí)行。
總而言之:個人理解是 一個py文件自己直接被執(zhí)行時,其內(nèi)部的__name__ == '__main__'? 。而這個py文件被導入到其他文件時執(zhí)行時,這個py文件的__name__ 即不是__main__了,而是變成了這個py文件的文件名[不包含后綴.py]
?
作用:有了這個區(qū)別,我們就可以使用 if __name__? == '__main__' 內(nèi)部寫測試代碼,自己運行自己這個才可以檢測的內(nèi)容,但是當別人調(diào)用時,這些測試代碼不會被執(zhí)行。用來區(qū)分是自己執(zhí)行還是別人調(diào)用。
以上個人理解,可能不一定準確,有問題可指正,謝謝!
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
