日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python 中 __name__ == '__main__' 的作用

作者:一去丶二三里 更新時間: 2022-04-01 編程語言

簡述

經常,會在 Python 模塊中看到 if __name__ == '__main__': 這樣的代碼,究竟有什么作用呢?

有句話經典地概括了這段代碼的意義:

Make a script both importable and executable

意思是說:模塊既可以被導入(到 Python shell 或者其他模塊中),也可以作為腳本來執行。

| 版權聲明:一去、二三里,未經博主允許不得轉載。

__name__ 屬性

所有模塊都有一個內置的屬性 __name____name__ 的值取決于如何使用這個模塊。

例如,有一個名為 calc.py 的模塊,包含以下代碼:

print('__name__:', __name__)

當導入模塊時,__name__ 是模塊的文件名:

>>> import calc
__name__: calc

但是,如果將其作為腳本使用,__name__ 就是一個特殊的值 __main__

$ python calc.py 
__name__: __main__

由此,可以得出一個結論:當模塊被導入時,模塊名稱是文件名;而當模塊作為腳本獨立運行時,名稱為 __main__

讓模塊既可以導入又可以執行

回到最初的問題:if __name__ == '__main__':

通過上面的結論,可以推斷出:只有當模塊直接運行(即:不導入)時,才會執行 if 塊內的代碼。

修改一下 calc.py 模塊,內容如下:

def add(a, b):
    return a + b

print('test: 2 + 3 =', add(2, 3))

將其作為模塊導入:

>>> import calc
test: 2 + 3 = 5

再將其作為腳本來執行:

$ python calc.py 
test: 2 + 3 = 5

顯然,無論使用哪種方式,都會執行打印語句。

如果模塊只會被用作腳本,那沒什么問題,但若希望將其作為一個導入模塊時,往往不想打印出測試用例。在這種情況下,__name__ 就派上用場了。

完善 calc.py 模塊,為其添加一個 if 語句:

def add(a, b):
    return a + b

if __name__ == '__main__':
    print('test: 2 + 3 =', add(2, 3))

這時,再導入模塊,不會執行任何打印語句:

>>> import calc
>>> 

而將其作為腳本直接運行,卻可以正常打印:

$ python calc.py 
test: 2 + 3 = 5

這就是 __name__ 的神奇之處,可以利用這個特性為模塊提供用戶界面,或對模塊進行測試(將模塊作為腳本運行,來執行測試用例)。

通用形式

實際上,在 Python 中,一個名為 main 的函數沒有任何特殊的作用。

然而,通常的做法是在 main 函數中組織一個程序的主要功能,并使用類似于以下代碼進行調用:

def main():
    try:
        doMainthing()
        return 0
    except:
        return 1

if __name__ == "__main__":
    sys.exit(main())

sys.exit() 用于退出程序,其中 0 表示正常退出,其他值表示異常退出。

原文鏈接:https://waleon.blog.csdn.net/article/details/75081689

欄目分類
最近更新