<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Python相關程式碼中,我們經常會遇到如下程式碼段:
# stuff if __name__ == "__main__": # do stuff
本文將盡可能使用簡單的樣例來解釋這裡發生了什麼,以及需要使用if __name__=="__main__"
的情形。請注意,上述程式碼中name
和main
前後有2個下劃線字元。
閒話少說,我們直接開始吧!
當我們正常執行我們的Python
指令碼時,該指令碼中的變數__name__
的值一般為__main__
。我們來看個範例:
# first.py print(__name__)
我們在終端中執行上述指令碼,程式碼如下:
python first.py
輸出如下:
__main__
觀察上述輸出,當我們執行指令碼first.py
的時候,變數__name__
的值被設定為__main__
。
上述範例相對簡單,也相對容易理解。接著我們來舉個具有多個檔案的例子,這裡假設我們有三個指令碼,分別為a.py
,b.py
以及c.py
。
其中,a.py
的內容如下:
# a.py print("__name__ in a.py:", __name__) from b import * from c import *
此時,b.py
的內容如下:
# b.py print("__name__ in b.py:", __name__)
c.py
的內容如下:
# c.py print("__name__ in c.py:", __name__)
如果我們執行命令python a.py
得到結果如下:
__name__ in a.py: __main__
__name__ in b.py: b
__name__ in c.py: c
注意在指令碼a.py
中我們看到__name__
的值為__main__
,此時在指令碼b.py
中__name__
的值為b
, 同時 c.py
中__name__
的值為c
。這是因為我們執行的指令碼為a.py
,那麼該指令碼即a.py
中變數__name__
的值將會被設定為字串__main__
.
此外,指令碼b.py
和c.py
中的變數·__name__
分別保持為b
和c
,這是因為指令碼b.py
和c.py
不是直接執行的指令碼。而是我們執行的指令碼a.py
呼叫了b.py
和c.py
中的print
函數。
如果我們單獨執行python b.py
得到結果如下:
__name__ in b.py: __main__
相應的我們執行python c.py
,得到結果如下:
__name__ in c.py: __main__
觀察上述兩個輸出,當我們直接執行指令碼b.py
或c.py
,相應的指令碼裡的變數__name__
都將被設定為__main__
。
作為Python開發者,我們通常會在一個專案工程中建立多個Python
檔案而不是將所有程式碼都寫在一個Python
檔案中。因此我們通常會有一個主的Python
檔案用來作為專案工程的入口,同時其他檔案包含一些輔助性的函數實現。
我們來看個範例,這裡假設我們有兩個Python
檔案,如下:
# main.py from helper import * print(greet("bob"))
輔助函數實現 helper.py
內容如下:
# helper.py def greet(name): return "hello " + name print(greet("testname"))
如果此時我們執行命令 python main.py
,得到結果如下:
hello bob
hello testname
主要上述的import
語句將從helper.py
中引入所有的語句,所以helper.py
中的測試語句print(greet("testname"))
也將被執行。雖然我們可以通過新增註釋或者遮蔽註釋來達到執行main.py
或helper.py
來控制該測試語句的輸出,但是這種情形就是語句if __name__=="__main__"
大顯身手的情形。
我們針對上述情形,進行程式碼整改,如下:
# main.py from helper import * print(greet("bob"))
我們修改檔案 helper.py
內容如下:
def greet(name): return "hello " + name if __name__ == "__main__": print(greet("testname"))
此時,我們執行命令python main.py
,得到結果如下:
hello bob
注意,此時helper.py
中的變數 __name__
的值為helper
, 所以helper.py
中的if
語句不成立,進而將不會執行我們的測試語句print(greet("testname"))
.
此時,如果我們單獨執行命令python helper.py
,得到結果如下:
hello testname
單獨執行helper.py
時,此時改指令碼中的變數__name__
將被設定為__main__
,所以此時的測試語句將會被執行,輸出相應的測試結果。
本文重點介紹了Python中常見的if __name__=="__main__"
,重點分析了其背後的原理和應用的場景。
到此這篇關於Python中if __name__ == __main__的文章就介紹到這了,更多相關Python中if __name__ == __main__內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45