Python 命名空間

1定義

命名空間是從名稱到對象的映射驹溃,大部分的命名空間都是通過Python字典來實現(xiàn)的城丧,鍵值key是變量名,值value是變量值豌鹤。
命名空間提供了在項目中避免名字沖突的一種方法亡哄,各個命名空間是獨立的。所以同一個命名空間是不能有重名的布疙,但是不同的命名空間可以重名磺平。

2分類

python程序在執(zhí)行期間會有2-3個活動的命名空間,函數(shù)調(diào)用時有3個拐辽,非函數(shù)調(diào)用階段有2個。

  • 內(nèi)置名稱(built-in names):Python 語言內(nèi)置的名稱擦酌,任何模塊都可以訪問俱诸,比如函數(shù)名 abs、char 和異常名稱 BaseException赊舶、Exception 等等睁搭。
  • 全局名稱(global names):模塊中定義的名稱,記錄了模塊的變量笼平,包括函數(shù)园骆、類、其它導(dǎo)入的模塊寓调、模塊級的變量和常量锌唾。
  • 局部名稱(local names):函數(shù)中定義的名稱,記錄了函數(shù)的變量夺英,包括函數(shù)的參數(shù)和局部定義的變量晌涕。(類中定義的也是)
    三種命名空間

3查找順序

假設(shè)我們要使用變量isNeeded,Python查找的順序為局部的命名空間 -> 全局命名空間 -> 內(nèi)置命名空間。(調(diào)用函數(shù)的時候局部命名空間才活躍痛悯,若是沒有調(diào)用函數(shù)余黎,則直接在全局命名空間查找,若無果再在內(nèi)置命名空間查找)
若查找完三個命名空間后找不到變量isNeeded载萌,將引發(fā)NameError異常:NameError: name 'runoob' is not defined惧财。

4生命周期

命名空間的生命周期取決于對象的作用域巡扇。

  • Global(全局命名空間)在模塊被加載時創(chuàng)建,通常一直保留直到python解釋器退出垮衷。

  • Built-in(內(nèi)建命名空間)在python解釋器啟動時創(chuàng)建厅翔,一直保留直到解釋器退出。

  • Local(局部命名空間)在函數(shù)被調(diào)用時被創(chuàng)建帘靡,函數(shù)返回結(jié)果或者拋出異常時被刪除知给。(注:每一個遞歸函數(shù)都有自己的命名空間)

4.1創(chuàng)建順序

各命名空間創(chuàng)建順序:python解釋器啟動 ->創(chuàng)建內(nèi)建命名空間 -> 加載模塊 -> 創(chuàng)建全局命名空間 ->函數(shù)被調(diào)用 ->創(chuàng)建局部命名空間

4.2銷毀順序

各命名空間銷毀順序:函數(shù)調(diào)用結(jié)束 -> 銷毀函數(shù)對應(yīng)的局部命名空間 -> python虛擬機(jī)(解釋器)退出 ->銷毀全局命名空間 ->銷毀內(nèi)建命名空間

python解釋器加載階段會創(chuàng)建出內(nèi)建命名空間、模塊的全局命名空間描姚,局部命名空間是在運行階段函數(shù)被調(diào)用時動態(tài)創(chuàng)建出來的涩赢,函數(shù)調(diào)用結(jié)束動態(tài)的銷毀的。

5屬性

python的全局命名空間存儲在一個叫globals()的dict對象中轩勘;局部命名空間存儲在一個叫locals()的dict對象中筒扒。可以用print (locals())來查看該函數(shù)體內(nèi)的所有變量名和變量值绊寻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末花墩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子澄步,更是在濱河造成了極大的恐慌冰蘑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件村缸,死亡現(xiàn)場離奇詭異祠肥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)梯皿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門仇箱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人东羹,你說我怎么就攤上這事剂桥。” “怎么了属提?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵权逗,是天一觀的道長。 經(jīng)常有香客問我冤议,道長旬迹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任求类,我火速辦了婚禮奔垦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尸疆。我一直安慰自己椿猎,他們只是感情好惶岭,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犯眠,像睡著了一般按灶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筐咧,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天鸯旁,我揣著相機(jī)與錄音,去河邊找鬼量蕊。 笑死铺罢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的残炮。 我是一名探鬼主播韭赘,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼势就!你這毒婦竟也來了泉瞻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤苞冯,失蹤者是張志新(化名)和其女友劉穎袖牙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舅锄,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鞭达,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巧娱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡烘贴,死狀恐怖禁添,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桨踪,我是刑警寧澤老翘,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站锻离,受9級特大地震影響铺峭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汽纠,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一卫键、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虱朵,春花似錦莉炉、人聲如沸钓账。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梆暮。三九已至,卻和暖如春绍昂,著一層夾襖步出監(jiān)牢的瞬間啦粹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工窘游, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留唠椭,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓张峰,卻偏偏與公主長得像泪蔫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子喘批,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 準(zhǔn)備知識: 1.在Python解釋器開始執(zhí)行之后撩荣,機(jī)會在內(nèi)存中開辟一個空間,每當(dāng)遇到 一個變量的時候饶深,就把變量和值...
    小學(xué)弟_閱讀 374評論 0 0
  • 分四部分揭示Python命名空間的本質(zhì): 一餐曹、命名空間的定義 Python使用叫做命名空間的東西來記錄變量的軌跡。...
    jiangmo閱讀 383評論 0 1
  • 命名空間 學(xué)習(xí)過python函數(shù)部分的知識敌厘,我們都知道在函數(shù)里面時不可直接引用函數(shù)外面的函數(shù)的台猴。這是為什么呢? 我...
    可笑的黑耀斑閱讀 309評論 0 0
  • 命名空間 Python中變量的使用有作用域的問題宪彩,即命名空間(namespace)休讳。任何在函數(shù)中 賦值...
    python_run閱讀 499評論 0 0
  • 問題 之前一個同學(xué)寫 python 時遇到了一個錯誤,我看了 python 的報錯提示尿孔,如下: UnboundLo...
    除囧閱讀 307評論 0 0