Python函數(shù)編程——名稱空間
名稱空間又名name space,顧名思義就是存放名字的地方,存什么名字呢?舉例說明,若變量x=1,1存放于內(nèi)存中,那名字x存放在哪里呢? 稱空間正是存放名字x與1綁定關(guān)系的地方。
Python里面有很多名字空間,每個(gè)地方都有自己的名字空間,互不打擾,不同空間中的兩個(gè)相同名字的變量之間沒有任何關(guān)系。
名稱空間有4種: LEGB
-
locals:函數(shù)內(nèi)部的名字空間,一般包括函數(shù)的局部變量以及形式參數(shù)。 -
enclosing function:在嵌套函數(shù)中外部函數(shù)的名字空間,若fun2嵌套在fun1里,對(duì)fun2來說,fun1的名字空間就enclosing。 -
globals:當(dāng)前的模塊空間,模塊就是一些py文件。也就是說,globals()類似全局變量。 -
builtins:內(nèi)置模塊空間,也就是內(nèi)置變量或者內(nèi)置函數(shù)的名字空間。
不同變量的作用域不同就是由這個(gè)變量所在的名稱空間所決定的。
作用域即范圍
- 全局范圍:全局存活,全局有效。
- 局部范圍:臨時(shí)存活,局部有效。
查看作用域方法:
globals()
,
locals()
作用域查找順序
當(dāng)程序引用某個(gè)變量的名字時(shí),就會(huì)從當(dāng)前名字空間開始搜索。搜索順序規(guī)則便是: LEGB 。即 locals -> enclosing function -> globals ->builtins 。一層一層的查找,找到了之后,便停止搜索,如果最后沒有找到,則拋出NameError的異常。
level = 'L0'
n = 22
def func():
level = 'L1'
n = 33
print(locals())
def outer():
n = 44
level = 'L2'
print("outer:",locals(),n)
def inner():
level = 'L3'
print("inner:",locals(),n) #此外打印的n是多少?
inner()
outer()
func()
輸出
{'n': 33, 'level': 'L1'}
outer: {'level': 'L2', 'n': 44} 44
inner: {'level': 'L3', 'n': 44} 44
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

