聊聊Python代碼中if?__name__?==?‘__main__‘的作用是什么
Python中if __name__ == ‘__main__‘作用
要搞清楚這個(gè)問(wèn)題,要知道以py作為后綴的Python代碼文件,有兩種使用方式,第一種方式是直接運(yùn)行,另一種方式是作為模塊被別的py文件導(dǎo)入。
當(dāng)采用第一種方式直接運(yùn)行自身時(shí),__name__的值為_(kāi)_main__;
當(dāng)采用第二種方式被別的模塊導(dǎo)入時(shí),其__name__的值為其文件名(通常也稱為模塊名);
舉例實(shí)測(cè)如下:
用PyCharm新建一個(gè)Python工程后,新建兩個(gè)py文件,文件名分別為AAA.py和BBB.py
然后在AAA.py中寫上如下代碼:
print('當(dāng)前AAA.py中__name__的值為:', __name__)
在BBB.py中寫上如下代碼:
import AAA
然后分別運(yùn)行這兩個(gè)Python文件,結(jié)果如下:
運(yùn)行AAA.py的結(jié)果如下:

運(yùn)行BBB.py的結(jié)果如下:

這個(gè)示例除了應(yīng)證了上面說(shuō)的py文件的兩種使用方式,還表明使用import導(dǎo)入py文件/模塊時(shí),這個(gè)被導(dǎo)入的py文件中沒(méi)有縮進(jìn)的代碼會(huì)被全部執(zhí)行一遍。
這樣就帶來(lái)了一個(gè)問(wèn)題,如果我在導(dǎo)入模塊AAA.py時(shí)如果有想代碼不想被執(zhí)行,那么該怎么做呢?語(yǔ)句“if __name__ == ‘__main__’”就能實(shí)現(xiàn)這個(gè)作用,具體怎么用,有朋友看了上面的例子應(yīng)該已經(jīng)明白了,如果還不明白,請(qǐng)看下面這個(gè)例子:
修改上面的AAA.py的代碼為如下代碼:
print('\n')
print('當(dāng)前AAA.py中__name__的值為“{}”'.format(__name__))
if __name__ == '__main__':
print('\n')
print('當(dāng)前運(yùn)行的文件是AAA.py')
else:
print('\n')
print('當(dāng)前AAA.py是作為模塊被其它py文件導(dǎo)入')
再次分別運(yùn)行AAA.py和BBB.py,結(jié)果分別如下:


可見(jiàn)通過(guò)語(yǔ)句“if __name__ == ‘__main__’,就能判斷出一個(gè)py文件是直接運(yùn)行還是作為模塊文件被別的py文件導(dǎo)入的,進(jìn)而通過(guò)這個(gè)判斷實(shí)現(xiàn)一些代碼的不被執(zhí)行。
那么通常來(lái)說(shuō)哪些代碼不希望被執(zhí)行呢?當(dāng)文件被作者定義為一個(gè)模塊時(shí),里面難免含有一些測(cè)試代碼,當(dāng)模塊被import時(shí),這些代碼是不希望被執(zhí)行的。
補(bǔ)充:if __name__ == '__main__':的運(yùn)行原理
每個(gè)python模塊(python文件,也就是此處的 test.py 和 import_test.py)都包含內(nèi)置的變量 __name__,當(dāng)該模塊被直接執(zhí)行的時(shí)候,__name__ 等于文件名(包含后綴 .py );如果該模塊 import 到其他模塊中,則該模塊的 __name__ 等于模塊名稱(不包含后綴.py)。
而 “__main__” 始終指當(dāng)前執(zhí)行模塊的名稱(包含后綴.py)。進(jìn)而當(dāng)模塊被直接執(zhí)行時(shí),__name__ == 'main' 結(jié)果為真。
為了進(jìn)一步說(shuō)明,我們?cè)?test.py 腳本的 if __name__=="__main__": 之前加入 print(__name__),即將 __name__ 打印出來(lái)。文件內(nèi)容和結(jié)果如下:


可以看出,此時(shí)變量__name__的值為"__main__"。
再執(zhí)行 import_test.py,執(zhí)行結(jié)果如下:


此時(shí),test.py中的__name__變量值為 test,不滿足 __name__=="__main__" 的條件,因此,無(wú)法執(zhí)行其后的代碼。
總結(jié)
到此這篇關(guān)于Python代碼中if __name__ == ‘__main__‘的作用是什么的文章就介紹到這了,更多相關(guān)Python中if __name__ == ‘__main__‘作用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中if __name__ == "__main__"詳細(xì)解釋
- 正確理解Python中if __name__ == ''__main__''
- Python中if?__name__==‘__main__‘用法詳情
- Python中if __name__ == ''__main__''作用解析
- 關(guān)于Python中的if __name__ == __main__詳情
- 一篇文章徹底弄懂Python中的if?__name__?==?__main__
- 深入理解python中if?__name__?==?‘__main__‘
- Python中if __name__ == “__main__“的作用總結(jié)
相關(guān)文章
python批量檢查兩個(gè)對(duì)應(yīng)的txt文件的行數(shù)是否一致的實(shí)例代碼
這篇文章主要介紹了python批量檢查兩個(gè)對(duì)應(yīng)的txt文件的行數(shù)是否一致,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Python 使用 PyQt5 開(kāi)發(fā)的關(guān)機(jī)小工具分享
這篇文章主要介紹了Python 使用 PyQt5 開(kāi)發(fā)的關(guān)機(jī)小工具分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
python如何利用matplotlib繪制并列雙柱狀圖并標(biāo)注數(shù)值
Python之中最好的圖表庫(kù)叫matplotlib,matplotlib,顧名思義就是提供了一整套和matlab相似的API,它的文檔相當(dāng)完備,下面這篇文章主要給大家介紹了關(guān)于python如何利用matplotlib繪制并列雙柱狀圖并標(biāo)注數(shù)值的相關(guān)資料,需要的朋友可以參考下2022-04-04
Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法
這篇文章主要介紹了Pytorch中的variable, tensor與numpy相互轉(zhuǎn)化的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Python實(shí)現(xiàn)的從右到左字符串替換方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的從右到左字符串替換方法,涉及Python字符串遍歷、運(yùn)算、判斷、替換等相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
從基礎(chǔ)到高階詳解Python數(shù)據(jù)匯總與統(tǒng)計(jì)的完全指南
在當(dāng)今的??數(shù)據(jù)驅(qū)動(dòng)時(shí)代??,高效地進(jìn)行數(shù)據(jù)匯總與統(tǒng)計(jì)分析已成為開(kāi)發(fā)者、數(shù)據(jù)分析師和科研人員的??核心競(jìng)爭(zhēng)力??,本文將全面探討Python中數(shù)據(jù)匯總與統(tǒng)計(jì)的各種方法,感興趣的小伙伴可以了解下2025-10-10

