1. 程式人生 > >if __name__ == 'main': 的作用和原理

if __name__ == 'main': 的作用和原理

控制 tle .net com exp __name__ net 等於 itl

if __name__ == main:

功能


一個python的文件有兩種使用的方法,第一是直接作為腳本執行,第二是import到其他的python腳本中被調用(模塊重用)執行。

if __name__ == ‘main‘: 的作用:

就是控制這兩種情況執行代碼的過程,在“if __name__ == ‘main‘: ”下的代碼只有在第一種情況下(即文件作為腳本直接執行)才會被執行,而import到其他腳本中是不會被執行的

原理


每個python模塊(python文件,也就是*.py)都包含內置的變量__name__。

1. 當運行模塊(A.py)作為腳本自己去運行的話,對應的模塊名始終叫做__main__,即模塊A.py文件本身,而__name__等於模塊名稱,也就等於__main__;

2. 如果模塊(A.py)import到其他模塊(B.py)中,對應的模塊名叫做A,則__name__等於模塊名稱A。

所以,當模塊被直接執行時,__name__ == ‘__main__‘結果為真;當模塊被import到其他的python腳本中被調用執行,不滿足__name__=="__main__"的條件,因此,無法執行其後的代碼。

test.py

print("I‘m the first.")
print(__name__)
if __name__=="__main__":
     print("I‘m the second.")

python test.py的結果:

Im the first.
__main__ Im the second.

import_test.py

import test

python import_test.py的結果:

Im the first.
test

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

__name__


如果是放在Modules模塊中,就表示是模塊的名字;

如果是放在Classs類中,就表示類的名字

__main__


模塊第一次被導出(import)後,系統會自動為其創建一個域名空間(namespace);(模塊,都是有自己的名字的)此處的腳本的主模塊的名字,始終都叫做__main__。

【參考文檔】

python編程中的if __name__ == ‘main‘: 的作用和原理:http://www.dengfeilong.com/post/60.html

Python中的__name__和__main__含義詳解:https://blog.csdn.net/jjwen/article/details/53084882

Python中的__name__和__main__含義詳解: https://www.crifan.com/python_detailed_explain_about___name___and___main__/comment-page-1/

if __name__ == 'main': 的作用和原理