溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python代碼中if?__name__?==?‘__main__‘有什么作用

發(fā)布時(shí)間:2022-03-17 09:00:31 來(lái)源:億速云 閱讀:210 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“Python代碼中if __name__ == ‘__main__‘有什么作用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

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__的值為其文件名(通常也稱(chēng)為模塊名);

舉例實(shí)測(cè)如下:

用PyCharm新建一個(gè)Python工程后,新建兩個(gè)py文件,文件名分別為AAA.py和BBB.py

然后在AAA.py中寫(xiě)上如下代碼:

print('當(dāng)前AAA.py中__name__的值為:', __name__)

在BBB.py中寫(xiě)上如下代碼:

import AAA

然后分別運(yùn)行這兩個(gè)Python文件,結(jié)果如下:

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

Python代碼中if?__name__?==?‘__main__‘有什么作用

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

Python代碼中if?__name__?==?‘__main__‘有什么作用

這個(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é)果分別如下:

Python代碼中if?__name__?==?‘__main__‘有什么作用

Python代碼中if?__name__?==?‘__main__‘有什么作用

可見(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__ 等于模塊名稱(chēng)(不包含后綴.py)。

 “__main__” 始終指當(dāng)前執(zhí)行模塊的名稱(chēng)(包含后綴.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é)果如下:

Python代碼中if?__name__?==?‘__main__‘有什么作用

Python代碼中if?__name__?==?‘__main__‘有什么作用

可以看出,此時(shí)變量__name__的值為"__main__"。

再執(zhí)行 import_test.py,執(zhí)行結(jié)果如下:

Python代碼中if?__name__?==?‘__main__‘有什么作用

Python代碼中if?__name__?==?‘__main__‘有什么作用

此時(shí),test.py中的__name__變量值為 test,不滿(mǎn)足 __name__=="__main__" 的條件,因此,無(wú)法執(zhí)行其后的代碼。

“Python代碼中if __name__ == ‘__main__‘有什么作用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI