Python:函數名稱空間與作用域:
Python:函數名稱空間與作用域
函數對象:(第一類對象)
定義:函數是第一類對象:函數名可以當做數據來使用
1.可以直接被引用,加()就能運行 def foo(): print("from foo") f=foo f() 2.可以當作參數傳入另一個函數 def warpper(x): x() warpper(foo) 3.可以當作另外函數的返回值def warpper2(): return foo f=warpper2() print(f is foo) 4.可以當作容器類型的一個元素 l=[foo,1,2] l[0]()
名稱空間:
定義:存放名字與值綁定關系的地方(實際上是一塊隔離的內存空間)
分類:
內置名稱空間:
存放的是:內置的名字與值的綁定關系
生效:python解析器啟動
失效:python解析器關閉
全局名稱空間:
存放的是:文件級別定義的名字與值的綁定
生效:執行python文件時,以該文件級別定義的名字與值的綁定關系
失效:文件執行完畢
局部名稱空間:
存放的是:函數內部定義的名字與值的綁定關系
生效:調用函數時,臨時生效
失效:函數調用結束
加載順序:先內資,再全局,最後局部
尋找順序:先局部,再全局, 最後內置
作用域:
註意:作用域關系,在函數定義時,就已經固定了,與調用位置無關。
使用函數對象可以打破作於域的層級關系。
全局作用域:包含內置名稱空間與全局名稱空間。
全局存活,全局生效
globals(),顯示全局作用域中的名字對應關系
局部作用域:包含局部名稱空間
臨時存活,局部生效
locals(),顯示當前局部作用域中的名字對應關系
相關關鍵字:都是在函數內部使用
global 申明使用全局作用域中的名字
nonlocal 申明不使用的本級局部作用域中的名稱
Python:函數名稱空間與作用域: