if __name__ == '__main__':的作用

if __name__ == '__main__':的作用

一個(gè)python文件通常有兩種使用方法,第一是作為腳本直接執(zhí)行第二是 import 到其他的 python 腳本中被調(diào)用(模塊重用)執(zhí)行。因此?if __name__ == 'main':?的作用就是控制這兩種情況執(zhí)行代碼的過(guò)程,在?if __name__ == 'main': 下的代碼只有在第一種情況下(即文件作為腳本直接執(zhí)行)才會(huì)被執(zhí)行,而 import 到其他腳本中是不會(huì)被執(zhí)行的。舉例說(shuō)明如下:

直接執(zhí)行

在 test.py 中寫入如下代碼:

test文件

直接執(zhí)行 test.py,結(jié)果如下圖,可以成功 print 兩行字符串。即,if __name__=="__main__": 語(yǔ)句之前和之后的代碼都被執(zhí)行。

直接作為腳本執(zhí)行

import 執(zhí)行

然后在同一文件夾新建名稱為 import_test.py 的腳本,輸入如下代碼:

import_test文件

執(zhí)行?import_test.py 腳本,輸出結(jié)果如下:

作為模塊import執(zhí)行

只輸出了第一行字符串。即,if __name__=="__main__": 之前的語(yǔ)句被執(zhí)行,之后的沒有被執(zhí)行。

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é)果如下:

test.py文件

直接執(zhí)行結(jié)果

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

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

作為模塊import執(zhí)行結(jié)果

此時(shí),test.py中的__name__變量值為 test,不滿足 __name__=="__main__" 的條件,因此,無(wú)法執(zhí)行其后的代碼。給大家整理了Python很全面的資料和教程可以加裙 227-435 450下載,適合正在學(xué)習(xí)Python的朋友。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容