【整理】Python中的__name__和__main__含義詳解

背景

在寫Python代碼和看Python代碼時,我們常??梢钥吹竭@樣的代碼:
def main():
......
if __name == "main":
main();
其中的函數(shù)名main,也可以是其他任意的,你所設置的名字。
這里,就出現(xiàn)了,我們此處所要解釋的
namemain

用代碼來演示namemain的含義和用法

文字解釋,還是很容易糊涂的,下面就來借用一個這里:
What is ‘if name == “main”‘ for?
的代碼來詳細解釋一下。
作為普通的代碼,我們是可以這么寫的:

Paste_Image.png

對應的,運行結果也是很正常的:


Paste_Image.png

但是呢,往往我們所見到的,和我們以后自己也會遇到的,自己寫的,有條理的,可復用的做法,那肯定是
那對應的square等函數(shù),專門放到一個文件中,然后被別人調(diào)用,此時,就是這樣的:
對應的模塊文件是mymath.py,里面有我們實現(xiàn)的函數(shù)square:

Paste_Image.png

然后別的python文件name___and___main.py中,導入此mymath模塊,然后使用其square函數(shù):

Paste_Image.png

然后運行結果是:

Paste_Image.png

此處,我們看到了,也同時出現(xiàn)了,原本用于mymath.py中去測試square函數(shù)的打印結果:
test: square(42) == 1764
而這樣的內(nèi)容,很明顯,是作為我模塊的調(diào)用者,不希望看到的。也不關心的。
此時,我們所希望的是:
作為模塊mymath.py本身,希望有自己的相關的調(diào)試的代碼,用于調(diào)試自己模塊函數(shù),演示如何使用等等代碼;
但是又不希望在被別的,本模塊的調(diào)用者,所執(zhí)行到,所看到;
此時,就可以用上述的main來實現(xiàn)了:
把mymath.py改為:

Paste_Image.png

此時:

  1. 作為mymath.py本身,自己運行時,可以運行到此處的代碼,調(diào)試,驗證自己的函數(shù)square執(zhí)行的是否正確:
Paste_Image.png

2.同時,作為mymath.py的調(diào)用者name___and___main.py,在import mymath的時候,也不會看到對應的代碼執(zhí)行的結果了:

Paste_Image.png

其中的main,就是:
作為模塊mymath.py本身:
 作為腳本自己去運行的話,對應的模塊名,就是上面所解釋的,始終叫做main
  關于這點,上述代碼已經(jīng)驗證過了。因為mymath.py中的name,就是對應的,內(nèi)置的變量,通過判斷,的確是main,然后才會去執(zhí)行到對應的模塊的測試代碼的。
 如果被當做一個模塊被別人調(diào)用的時候,對應的模塊mymath.py的模塊名,就是mymath;
  關于這點,我們可以來驗證一下,把name___and___main.py改為:

Paste_Image.png

再去運行,就可以看到輸出的結果是mymath了:

Paste_Image.png

示例2

另外,這里:
A Byte of Python – A module’s name
也有個例子,相對更加簡潔,需要的可以參考一下。
摘錄其代碼如下:

Paste_Image.png

【總結】
name:表示模塊,類等的名字;
main:模塊,xxx.py文件本身:
 被直接執(zhí)行時,對應的模塊名就是main
  可以在
  if name == “main”:
  中添加你自己想要的,用于測試模塊,演示模塊用法等代碼。
 作為模塊,被別的Python程序?qū)耄╥mport)時,模塊名就是本身文件名xxx了。

總的來說,即:
python文件本身自己運行時,顯示的是:This program is being run by itself
Python文件被別人import導入時,顯示的是:I am being imported from another module

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

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

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