python中的LEGB 规则
Python???使???? LEGB??? 的順序來查找?個符號對應的對象
locals??? ->???enclosing??? function??? ->???globals??? ->??? builtins
局部變量———閉包空間———全局變量———內建模塊
a??? =??? 1??????? #??? 全局變量???globals
def???fun():
a??? =??? 2??????? #?? ?閉包變量???enclosing
| def??? inner_fun(): a??? =??? 3?????? ?#??? 局部變量??? locals ??????????????????????????????? ?print("a=%d"??? %??? a)???? ?# 內建模塊 builtins??????? ?return??? inner_fun f??? =??? fun() f() |
?
locals,當前所在命名空間(如函數、模塊),函數的參數也屬于命名空間內的變量 enclosing,外部嵌套函數的命名空間(閉包中常見)
| def??? fun1(): ??????? a??? =??? 10 ???????? def??? fun2():? #??? a??? 位于外部嵌套函數的命名空間 print(a) |
globals,全局變量,函數定義所在模塊的命名空間
| a??? =??? 1 def??? fun():? #??? 需要通過??? global??? 指令來聲明全局變量 global??? a #??? 修改全局變量,?不是創建?個新的??? local??? 變量 ???????? a??? =??? 2 |
?
builtins,內建模塊的命名空間。
| Python??? 在啟動的時候會自動為我們載?很多內建的函數、類, ?如??? dict,list,type,print,這些都位于??? __builtin__??? 模塊中可以使? dir(__builtin__) 來查看。???????? 這也是為什么我們在沒有 import任何模塊的情況下,就能使?豐富的函數和功能了。 |
| 在Python中,有?個內建模塊,在該模塊中有?些常?函數;在Python啟動后,且沒有執?程序員所寫的任何代碼前,Python會?先加載該內建模塊到內存。???????? 另外,該內建模塊中的功能可以直接使?,不?在其前添加內建模塊前綴,???????? 其原因是對函數、變量、類等標識符的查找是按LEGB法則,其中B即代表內建模塊 ?如:內建模塊中有?個abs()函數,其功能求絕對值,如abs(-20)將返回20。 |
總結
以上是生活随笔為你收集整理的python中的LEGB 规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中的保护对象数据
- 下一篇: 列表与表单