Python基礎 7 函式 名稱空間
阿新 • • 發佈:2019-01-06
Python的名稱空間的本質是一個字典,用來記錄變數名稱和值。字典的key是變數的名稱,字典的value對於的是變數的值。
例如 {‘name’:’zs’,’age’:10}
名稱空間一共分為三種:區域性名稱空間、全域性名稱空間、內建名稱空間
區域性空間:
每個函式都有自己的名稱空間,叫做區域性空間,它記錄了函式的變數,包括函式的引數 和區域性定義的變數
全域性空間:
每個模組擁有他自己的名稱空間,叫做全域性名稱空間,他記錄了模組的變數,包括函式、類、其他匯入的模組
內建名稱空間:
任何模組都可以訪問他,他存放著內建的函式和異常
input print str list tuple
名稱空間的訪問
區域性名稱空間使用 locals()函式來訪問
全域性名稱空間的訪問使用 globals()函式訪問
def func(name,age): num = 10 ret = locals() #區域性名稱空間 print(ret) #{'age': '10', 'name': 'zs', 'num': 10} func('zs','10')
a = 10 def func(name,age): num = 10 ret = locals() #區域性名稱空間 print(ret) #{'age': '10', 'name': 'zs', 'num': 10} func('zs','10') ret = globals() #獲取全域性變數 print(ret) {'age': '10', 'name': 'zs', 'num': 10} {'__spec__': None, '__name__': '__main__', 'ret': {...}, '__cached__': None, '__file__': 'D:/Pythonworkspace/day08/demo1.py', 'func': <function func at 0x00000000011867B8>, '__doc__': '\n名稱空間\n', 'a': 10, '__builtins__': <module 'builtins' (built-in)>, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000FA8AC8>}
裡面有很多內建變數名稱
2名稱空間的載入順序
內建名稱空間(程式執行前載入)------>>>
全域性名稱空間(程式執行中:從上到下載入)---------->>>
區域性名稱空間(程式執行中:呼叫時才載入)當函式返回結果或丟擲異常時,被刪除。每一個遞迴呼叫的函式都用自己的名稱空間
3 名稱空間的查詢順序
當使用某個變數的時候,先從區域性名稱空間中找,如果能找到則停止搜尋,如果找不到在去全域性名稱空間中查詢,如果找到則停止搜尋,如果找不到則到內建名稱空間中查詢,如果找不到則報錯。
id= 10
def func():
id = 20
print(id) 20
func()
print(id) 10
查詢順序 區域性 全域性 內建 如果先從區域性名稱空間中查詢到 則停止搜尋,一次向下進行查詢,做後如果查不到就報錯 如果一開始就在全域性空間中查詢 ,找不到就去內建空間中去查詢 ,找到就列印,找不到就報錯
巢狀函式的情況:
1、先在當前 (巢狀的或 lambda) 函式的名稱空間中搜索
2、然後是在父函式的名稱空間中搜索
3、接著是模組名稱空間中搜索
4、最後在內建名稱空間中搜索
id = 10
def outter():
id = 11
def inner():
id = 12
print(id) #12
inner()
outter()