Python函數編程——名稱空間
名稱空間又名name space,顧名思義就是存放名字的地方,存什么名字呢?舉例說明,若變量x=1,1存放于內存中,那名字x存放在哪里呢? 稱空間正是存放名字x與1綁定關系的地方。
Python里面有很多名字空間,每個地方都有自己的名字空間,互不打擾,不同空間中的兩個相同名字的變量之間沒有任何關系。
名稱空間有4種: LEGB
-
locals
:函數內部的名字空間,一般包括函數的局部變量以及形式參數。 -
enclosing function
:在嵌套函數中外部函數的名字空間,若fun2嵌套在fun1里,對fun2來說,fun1的名字空間就enclosing。 -
globals
:當前的模塊空間,模塊就是一些py文件。也就是說,globals()類似全局變量。 -
builtins
:內置模塊空間,也就是內置變量或者內置函數的名字空間。
不同變量的作用域不同就是由這個變量所在的名稱空間所決定的。
作用域即范圍
- 全局范圍:全局存活,全局有效。
- 局部范圍:臨時存活,局部有效。
查看作用域方法:
globals()
,
locals()
作用域查找順序
當程序引用某個變量的名字時,就會從當前名字空間開始搜索。搜索順序規則便是: 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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
