Python - if __name__ == '__main__' 是什麼?
如果只有一頁,沒有什麼影響
page1.py
#page1.py
def myfn1():
print("1.hello");
print("1.hi");
myfn1();
如果是其它網頁,例如page2.py
要引入page1.py
page2.py
#page2.py
from page1 import myfn1
print("2.hi");
myfn1();
主程式在被引用的時候也被執行了,原因在於:
- 當 Python 檔案(模組、module)被引用的時候,檔案內的每一行都會被 Python 直譯器讀取並執行(所以
page1.py
內的程式碼會被執行) - Python 直譯器執行程式碼時,有一些內建、隱含的變數,
__name__
就是其中之一,其意義是「模組名稱」。如果該檔案是被引用,其值會是模組名稱; - 但若該檔案是(透過命令列)直接執行,其值會是
__main__
。
可試著在 page1.py
內加上 __name __
印出看看 , 值的名稱會為__main__
#page1.py
def myfn1():
print("1.hello");
print("1.hi");
myfn1();
print("name=",__name__);
再執行page2.py
這裡的name會改成page1
你就可以看到 __name__
的值在檔案被直接執行時與被引用時是不同的。所以回到上面的問題:
要怎麼讓檔案在被引用時,不該執行的程式碼不被執行?
就是靠 __name__ == '__main__'
來做判斷
只有當__name__是主檔(__main)才會執行 #如果是被引入的就不會執行
page1.py
#page1.py
def myfn1():
print("1.hello");
if __name__ == '__main__':
print("1.hi");
myfn1();
這時候就只有page1.py 自己執行時,會被執行
page1.py
page2.py
參考:http://blog.castman.net/%E6%95%99%E5%AD%B8/2018/01/27/python-name-main.html
Yiru@Studio - 關於我 - 意如