1. 程式人生 > 實用技巧 >函式(四)-名稱空間與作用域

函式(四)-名稱空間與作用域

一、名稱空間

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)會產生新的作用域。