python 函式的名稱空間及作用域
阿新 • • 發佈:2018-12-21
一:名稱空間
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 printnonlocal 例項(a) inner() print('這是func3中的a',a) func3()
執行結果為: 這是func3中的a 100