1. 程式人生 > >python 函式的名稱空間及作用域

python 函式的名稱空間及作用域

一:名稱空間

1:什麼是名稱空間:

  名稱空間即:儲存名字與值的記憶體地址關聯關係的空間

2.名稱空間的分類:

  內建名稱空間:儲存器自帶的一些名稱與值的對應關係,如:print,len,max等;

    生命週期為:在python直譯器啟動時建立,在直譯器關閉時銷燬

  全域性名稱空間:除了內建的,函式內的都是在全域性名稱空間中

    生命週期為:在執行檔案時,建立全域性名稱空間,所有檔案中的程式碼全部執行完畢後,銷燬名稱空間(即直譯器關閉時)

  區域性名稱空間:只要在函式內的名稱空間就是區域性的

    生命週期為:呼叫函式時建立,函式執行完畢時就銷燬

3.名稱空間的載入順序:內建的-->全域性的-->區域性的

   名稱空間的查詢順序:區域性名稱空間-->全域性名稱空間-->內建名稱空間(基於當前位置向上層空間查詢)

 

二. 作用域

  域:區域,範圍的意思

    全域性名稱空間和內建名稱空間在使用上沒有什麼區別,而區域性的名稱空間只能在區域性使用

  空間的範圍:global 表示全域性範圍  就是所謂的全域性作用域(globals 檢視全域性作用域的內容)

        local 表示區域性作用域 

  總結:1.查詢名稱的順序是基於當前位置向上層空間查詢

     2.名稱空間的巢狀關係是在函式定義階段就固定死的,與呼叫位置無關

# age=18
# def func2():
#     # 明確宣告使用全域性的變數age(修改a的值)
#     global age
#     age=19
# func2()
# print(age)
global 例項

執行結果為: 19

a = 1
def func3():
    a = 10
    def inner():
        # 明確宣告 要使用上一層的 a 如果上一層沒有,則使用上上一層,但是不能使用全域性中的a
        nonlocal a
        a = 100
        print
(a) inner() print('這是func3中的a',a) func3()
nonlocal 例項

執行結果為: 這是func3中的a 100