日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

聊聊Python代碼中if?__name__?==?‘__main__‘的作用是什么_python

作者:昊虹圖像算法 ? 更新時間: 2022-05-19 編程語言

Python中if __name__ == ‘__main__‘作用

要搞清楚這個問題,要知道以py作為后綴的Python代碼文件,有兩種使用方式,第一種方式是直接運行,另一種方式是作為模塊被別的py文件導入。

當采用第一種方式直接運行自身時,__name__的值為__main__;

當采用第二種方式被別的模塊導入時,其__name__的值為其文件名(通常也稱為模塊名);

舉例實測如下:

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

然后在AAA.py中寫上如下代碼:

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

在BBB.py中寫上如下代碼:

import AAA

然后分別運行這兩個Python文件,結果如下:

運行AAA.py的結果如下:

運行BBB.py的結果如下:

這個示例除了應證了上面說的py文件的兩種使用方式,還表明使用import導入py文件/模塊時,這個被導入的py文件中沒有縮進的代碼會被全部執行一遍。

這樣就帶來了一個問題,如果我在導入模塊AAA.py時如果有想代碼不想被執行,那么該怎么做呢?語句“if __name__ == ‘__main__’”就能實現這個作用,具體怎么用,有朋友看了上面的例子應該已經明白了,如果還不明白,請看下面這個例子:

修改上面的AAA.py的代碼為如下代碼:

print('\n')
print('當前AAA.py中__name__的值為“{}”'.format(__name__))
if __name__ == '__main__':
    print('\n')
    print('當前運行的文件是AAA.py')
else:
    print('\n')
print('當前AAA.py是作為模塊被其它py文件導入')

再次分別運行AAA.py和BBB.py,結果分別如下:

請添加圖片描述

請添加圖片描述

可見通過語句“if __name__ == ‘__main__’,就能判斷出一個py文件是直接運行還是作為模塊文件被別的py文件導入的,進而通過這個判斷實現一些代碼的不被執行。

那么通常來說哪些代碼不希望被執行呢?當文件被作者定義為一個模塊時,里面難免含有一些測試代碼,當模塊被import時,這些代碼是不希望被執行的。

補充:if __name__ == '__main__':的運行原理

每個python模塊(python文件,也就是此處的 test.py 和 import_test.py)都包含內置的變量 __name__,當該模塊被直接執行的時候,__name__ 等于文件名(包含后綴 .py );如果該模塊?import?到其他模塊中,則該模塊的 __name__ 等于模塊名稱(不包含后綴.py)。

?“__main__” 始終指當前執行模塊的名稱(包含后綴.py)。進而當模塊被直接執行,__name__ == 'main' 結果為真。

為了進一步說明,我們在 test.py 腳本的 if __name__=="__main__": 之前加入 print(__name__),即將 __name__ 打印出來。文件內容和結果如下:

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

再執行 import_test.py,執行結果如下:

此時,test.py中的__name__變量值為 test,不滿足 __name__=="__main__" 的條件,因此,無法執行其后的代碼。

總結

原文鏈接:https://blog.csdn.net/wenhao_ir/article/details/123016649

欄目分類
最近更新