時間:2023-02-20 05:10:01 | 來源:建站知識
時間:2023-02-20 05:10:01 來源:建站知識
戲說python的特殊變量 __name__:__name__
一二三狗子三二一
之類的。說到丑啊,我實在是不得不想起之前的一個讓人哭笑不得的事情“身份證為什么拍得這么丑?”因為拍的太漂亮太好看,你就會到處炫耀,誰知道哪一天給別人欣賞你的“秀色可餐”的面容的時候忘記拿回來,弄丟了。想想覺得很有道理!真的感謝公安人員的良苦用心??!!!
內(nèi)置變量
,寫成這樣就是防止你編程的時候取變量名的用到這個名字,你會用一二三狗子三二一
給自己的娃取名?(變量命名要么是_
開頭,要么是英文字母
開頭)。那它表示什么意思呢?它的意思就是運行的程序的名字(name)。首先寫一個簡單的
python
程序看一看,把這句話存到test.py
中運行一下:print("NAME IS : " + __name__)
運行python test.py
,結(jié)果是:NAME IS : __main__
咋地又來了一個一二三翠花三二一
(__main__
)?哈哈,你沒有看錯,這個內(nèi)置變量的真實名字(值)是__main__
。python
這個世界有著形形色色的東西啊!if __name__ == '__main__': balabala...
代碼翻譯過來就是,如果這個程序的名字
是__main__
,那么就balabala...
,那剛才我們試了,程序的名字就是__main__
這個翠花大西瓜??!為啥還做這個判斷呢?難道是下雨天打孩子——閑著也是閑著?__name__
放在函數(shù)里面是不是會神秘一些呢?我們把下面這些代碼保存到cuihua_and_dog.py
里面# cuihua_and_dog.py# 聲明一個函數(shù),這個用來試驗(名字我都給取好了,叫翠花狗子)def marry(): baby = "cuihua" + "dog" print(__name__ + "'s baby is : " + baby)marry()
當直接運行python cuihua_and_dog.py
的,結(jié)果是:__main__'s baby is : cuihuadog
結(jié)果__name__
還是和之前的那樣,還是__main__
cuihua_and_dog.py
實在是沒意思,我們來回到狗子翠花小的時候!我們不這么直接的運行它,我們把它當做模塊或者說包來運行看看會怎樣!把cuihua_and_dog.py
的marry()
刪除,在test.py
里面執(zhí)行marry()這個方法
,然把之前的test.py
里面的內(nèi)容換成下面這個,(記得把test.py
和cuihua_and_dog.py
這兩個文件放在一個文件夾里面)# test.py# 從cuihua_and_dog包里面導入marry方法到這里來from cuihua_and_dog import marrymarry()
然后運行python test.py
,結(jié)果是:cuihua_and_dog's baby is : cuihuadog
__name__
名字終于變了,看來老天也覺得這個名字好!就這個了翠花狗子
,哈哈!cuihua_and_dog.py
在兩種不同的運行方式里,__name__
不一樣:cuihua_and_dog.py --> __main__+----------+ /| | / 直接運行| __name__ | -------| | / 當做包運行+----------+ / --> cuihua_and_dog
就是說,當這個程序直接運行的時候,__name__
的值就是__main__
,如果作為包運行的時候就是包名。到這里應(yīng)該理解了為什么__name__
的值會是 __main__
了吧,也是為了防止我們把包的名字取為這個。if __name__ == '__main__':
這句話上面來,想一下,如果說是直接執(zhí)行這個程序的話,那么這個判斷就成立了,那就執(zhí)行if
里面的代碼;如果是被當做包運行,那就不會運行if
里面的代碼。if
來判斷,我們改一下cuihua_and_dog.py
里面的代碼:# cuihua_and_dog.pydef marry(): if __name__ == "__main__": # 翠花狗子長大了(直接執(zhí)行) baby = "cuihua" + "dog" print("baby is : " + baby) else: # 翠花狗子還是小時候(被當做包導入執(zhí)行) print("They are the kids! It is a guojiajia game!")# 翠花狗子長大了(直接執(zhí)行)if __name__ == "__main__": # 這里我們來布置一下婚禮現(xiàn)場,不能太直接,我們拐彎抹角一下 # 將這個函數(shù)不要說得這么直接,我們說這一天是快樂幸福的一天 OneFineDay = marry() # 這里到婚禮進行之前我們揭曉了 print("One Fine Day is : " + OneFineDay.__name__ ) # 結(jié)婚有了愛情的結(jié)晶 print("As time went by, They had a crystallization of love") OneFineDay()
這樣我們在回頭來執(zhí)行一下python test.py
,結(jié)果是:They are the kids! It is a guojiajia game!
但是當翠花和狗子長大了(我們直接執(zhí)行)的時候python cuihua_and_dog.py
,結(jié)果是One Fine Day is : marryAs time went by, They had a crystallization of lovebaby is : cuihuadog
從這里我們又可以看到,如果直接用__name__
的話那么就是代表當前這個包的名字。另外也可以知道函數(shù)的名字,例如上面寫的OneFineDay.__name__
,因為最原本的函數(shù)名是 marry
,所以這里是顯示的marry
,而不是 OneFineDay
。.py
文件的時候,這個文件里面的__name__
就是__main__
,如果不是直接執(zhí)行,而是被另外一個.py
文件import
的時候,這個文件里面的__name__
是這個py
的文件名。__name__
可以對程序進行調(diào)試,如果說當程序之間互相之間調(diào)用,比較復(fù)雜的關(guān)系的時候,使用if __name__ == '__main__':
將執(zhí)行的代碼放在里面,在執(zhí)行其他的程序的時候,測試的程序本身不會運行,而這個程序有問題的時候,可以執(zhí)行這個文件,那么if __name__ == '__main__':
里面的代碼就執(zhí)行了。關(guān)鍵詞:變量,特殊
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。