關於python中的 if name

2022-04-18 19:13:34 字數 1657 閱讀 8925

name 是內建變數,它表示的是當前所在模組的名字,同時還能反應乙個包的結構。

a├── b

│   ├── c.py

│   └── __init__.py

└── __init__.py

目錄中所有的py檔案的內容都為:

python(__name__)

模組名其實就是import時,要用到的名字。

如果乙個模組直接被執行,則其沒有包結構。其__name__值就為__main__。

python屬於指令碼語言,不像編譯型語言那樣先將程式編譯成二進位制再執行,而是動態的逐行解釋執行。也就是從指令碼第一行開始執行,沒有統一的入口。

乙個 python

原始碼檔案除了可以被直接執行外,還可以作為模組(也就是庫)被匯入。不管是匯入還是直接執行,最頂層的**都會被執行(python

用縮進來區分**層次)。而實際上在匯入的時候,有一部分**我們是不希望被執行的。

舉乙個例子來說明一下,假設我們有乙個 const.py 檔案,內容如下:

pi = 3.14

defmain():

print

"pi:

", pi

main()

我們在這個檔案裡邊定義了一些常量,然後又寫了乙個 main 函式來輸出定義的常量,最後執行 main 函式就相當於對定義做一遍人工檢查,看看值設定的都對不對。然後我們直接執行該檔案(python const.py),輸出:

pi: 3.14

現在,我們有乙個 area.py 檔案,用於計算圓的面積,該檔案裡邊需要用到 const.py 檔案中的 pi 變數,那麼我們從 const.py 中把 pi 變數匯入到 area.py 中:

from const import

pidef

calc_round_area(radius):

return pi * (radius ** 2)

defmain():

print

"round area:

", calc_round_area(2)

main()

執行 area.py,輸出結果:

pi: 3.14round area: 12.56

可以看到,const 中的 main 函式也被執行了,實際上我們是不希望它被執行,提供 main

也只是為了對常量定義進行下測試。這時,if __name__ == '__main__' 就派上了用場。把 const.py 改一下:

pi = 3.14

defmain():

print

"pi:

", pi

if__name__ == "

__main__":

main()

然後再執行 area.py,輸出如下:

round area: 12.56再執行下 const.py,輸出如下:

pi: 3.14

這才是我們想要的效果。

if __name__ == '__main__' 就相當於是

python 模擬的程式入口。python

本身並沒有規定這麼寫,這只是一種編碼習慣。由於模組之間相互引用,不同模組可能都有這樣的定義,而入口程式只能有乙個。到底哪個入口程式被選中,這取決於 __name__ 的值。

關於Python中的yield

在介紹yield前有必要先說明下python中的迭代器 iterator 和生成器 constructor 一 迭代器 iterator 在python中,for迴圈可以用於python中的任何型別,包括列表 元祖等等,實際上,for迴圈可用於任何 可迭代物件 這其實就是迭代器 迭代器是乙個實現了迭...

關於Python中的yield

在介紹yield前有必要先說明下python中的迭代器 iterator 和生成器 constructor 一 迭代器 iterator 在python中,for迴圈可以用於python中的任何型別,包括列表 元祖等等,實際上,for迴圈可用於任何 可迭代物件 這其實就是迭代器 迭代器是乙個實現了迭...

關於Python中的yield

在介紹yield前有必要先說明下python中的迭代器 iterator 和生成器 constructor 一 迭代器 iterator 在python中,for迴圈可以用於python中的任何型別,包括列表 元祖等等,實際上,for迴圈可用於任何 可迭代物件 這其實就是迭代器 迭代器是乙個實現了迭...