函式(四)-名稱空間與作用域
阿新 • • 發佈:2020-12-04
一、名稱空間
1 概念:儲存物件和值的字典
2 分類
- 區域性名稱空間:函式內定義內容。
- 全域性名稱空間:模組級別,當前所有的py檔案
- 內建名稱空間:直譯器級別,內建的方法等
3 訪問名稱空間
- locals():訪問區域性名稱空間:根據呼叫的位置有關係
- globals():訪問全域性名稱空間:與呼叫位置無關
4 載入順序:從大到小
5 查詢順序:從小到大
# 情形1 id = 10 def func(): id = 20 print(id) # 20 func() # # 情形2 id = 10 def func(): # id = 20 print(id) # 10 func() # 情形3 # id = 10 def func(): # id = 20 print(id) # id函式 func()
二、 作用域,區域性變數和全域性變數
1 概念
作用域:一個物件起作用的範圍。
區域性變數:僅在函式內部起作用的變數。
全域性變數:在整個檔案中起作用的變數。
2 作用域分類(LEGB)
-
Local(函式內部)區域性作用域
-
Enclosing(巢狀函式的外層函式內部)巢狀作用域(閉包)
-
Global(模組全域性)全域性作用域
-
Built-in(內建)內建作用域
a = 10 def func(): b = 20 def inner(): c = 30 print(c) inner() print(b) print(a)
問題:作用域和名稱空間關係?
作用域是一個或多個名稱空間疊加的結果。
注意:
在Python中,模組(module),類(class)、函式(def、lambda)會產生新的作用域。