首頁 > 軟體

聊聊Python程式碼中if __name__ == ‘__main__‘的作用是什麼

2022-03-16 19:00:25

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__" 的條件,因此,無法執行其後的程式碼。

總結

到此這篇關於Python程式碼中if __name__ == ‘__main__‘的作用是什麼的文章就介紹到這了,更多相關Python中if __name__ == ‘__main__‘作用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com