【Python】if __name__ == "__main__":的詳細理解,這是我見過最簡單容易的解釋了

 

1.引言

在Python當中,如果代碼寫得規範一些,通常會寫上一句if __name__ == "__main__":作爲程序的入口.

但似乎沒有這麼一句代碼,程序也能正常運行。

這句代碼多餘嗎?原理又在哪裏?本篇博文對此進行總結說明。

2.2個模塊正常調用

我們知道,當我們把模塊A中的代碼在模塊B中進行import A時,只要B模塊代碼運行到該import語句,模塊A的代碼會被執行。

# @File : test2.py

class A:
    a = 100
    print('你好,我是模塊A……')
    print(a)

運行結果:
你好,我是模塊A……
100
# @File : test4.py

from test2 import A
class B:
    b = 200
    print('你好,我是模塊B……')
    print(b)

運行結果:
你好,我是模塊A……
100
你好,我是模塊B……
200

 

3.2個模塊通過if __name__ == "__main__":進行調用

如果在模塊A中,我們有部分的代碼不想在被導入到B時直接被運行,但在直接運行A時可直接運行,那該怎麼做呢?

那就可以用到if __name__ == "__main__":這行代碼了,我們對上面用到的A模塊代碼進行修改,B保持原樣:

# @File : test2.py

class A:
    a = 100
    print('你好,我是模塊A……')
    if __name__ == "__main__":
        print(a)

運行結果:
你好,我是模塊A……
100
# @File : test4.py

from test2 import A
class B:
    b = 200
    print('你好,我是模塊B……')
    print(b)

運行結果:
你好,我是模塊A……
你好,我是模塊B……
200

看到了嗎,A模塊中的a的值就沒有再被輸出了。

所以,當你要導入某個模塊,但又不想改模塊的部分代碼被直接執行,那就可以這一部分代碼放在if __name__ == "__main__":內部。 

4.__name__ == "__main__"到底是什麼關係

__name__是Python的內置變量,用於指代當前模塊。

我們修改上面用到的A模塊和B模塊,在模塊中分別輸出模塊的名稱:

# @File : test2.py

class A:
    print('你好,我是模塊A……')
    print('模塊A中__name__的值:{}'.format(__name__))

運行結果:
你好,我是模塊A……
模塊A中__name__的值:__main__
# @File : test4.py

from test2 import A
class B:
    print('你好,我是模塊B……')
    print('模塊B中__name__的值:{}'.format(__name__))

運行結果:
你好,我是模塊A……
模塊A中__name__的值:test2
你好,我是模塊B……
模塊B中__name__的值:__main__

當哪個模塊被直接執行時,該模塊“__name__”的值就是“__main__”。

當被導入另一模塊時,“__name__”的值就是該模塊的真實名稱。

5.總結

所以,如果當前模塊A時直接執行,運行“if __name__ == "__main__":語句時,__name__的值就是__main__,結果是True,if __name__ == "__main__":下面的代碼塊就會被執行。

但是被引入時模塊B時,__name__的值就是A,結果是False,if __name__ == "__main__":下面的代碼塊不會被執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章