對於很多程式語言來說,程式都必須要有一個入口,比如 C,C++,以及完全面向物件的程式語言 Java,C# 等。如果你接觸過這些語言,對於程式入口這個概念應該很好理解,C 和 C++ 都需要有一個 main 函式來作為程式的入口,也就是程式的執行會從 main 函式開始。同樣,Java 和 C# 必須要有一個包含 Main 方法的主類來作為程式入口。 而 Python 則有不同,它屬於指令碼語言,不像編譯型語言那樣先將程式編譯成二進位制再執行,而是動態的逐行解釋執行。也就是從指令碼第一行開始執行,沒有統一的入口。
對於很多程式語言來說,程式都必須要有一個入口,比如 C,C++,以及完全面向物件的程式語言 Java,C# 等。如果你接觸過這些語言,對於程式入口這個概念應該很好理解,C 和 C++ 都需要有一個 main 函式來作為程式的入口,也就是程式的執行會從 main 函式開始。同樣,Java 和 C# 必須要有一個包含 Main 方法的主類來作為程式入口。
而 Python 則有不同,它屬於指令碼語言,不像編譯型語言那樣先將程式編譯成二進位制再執行,而是動態的逐行解釋執行。也就是從指令碼第一行開始執行,沒有統一的入口。
一段好的示例程式碼勝過一切
這裡有倆個程式
const.py用來定義常數PI
area.py
需要PI這個常數來計算圓的面積const.py
程式碼如下:PI
=
3.14def
main
():print
"PI:", PImain()
當執行python const.py,輸出
PI: 3.14
area.py
(匯入PI的值來計算圓面積)程式碼如下from const import PI
def
calc_round_area
(radius):return
PI*
(radius**
2)def
main
():print
"round area: ", calc_round_area(2)main()
當執行python area.py,因為匯入了const,輸出
PI: 3.14
round area: 12.56
可以看到
const.py裡面的main()也被執行了
但這是我們所不希望的
怎麼辦?
只需在const.py中加入一句:
PI
=
3.14def
main
():print
"PI:", PIif
__name__==
"__main__":main()
_name_代表當前模組的名字
當我們再次執行“python area.py”時
對於const.py來說
_name_不再是_main_
因此其中的main()不再被執行
最終得到我們想要的輸出
round area: 12.56
以上示例程式碼及註釋部分取自博文(非常好的總結文章,還詳細解釋了_
name_
):Python 中的 if __name__ == '__main__' 該如何理解