python直譯器開始執行之後, 就會在記憶體中開闢乙個空間, 每當遇到乙個變數的時候, 就把變數名和值之間的關係記錄下來, 但是當遇到函式定義的時候, 直譯器只是把函式名讀入記憶體, 表示這個函式存在了, 至於函式內部的變數和邏輯, 直譯器並不關心. 也就是說一開始的時候函式只是載入進來, 僅此而已, 只有當函式被呼叫和訪問的時候, 直譯器才會根據函式內部宣告的變數來進行開闢變數的內部空間. 隨著函式執行完畢, 這些函式內部變數占用的空間也會隨著函式執行完畢而被清空.
在py檔案中, 函式外宣告外都屬於全域性命名空間
1 a = 1 #記錄在全域性空間2 b = 2 #記錄在全域性空間34
def func(): #func記錄在全域性空間
5 c = 1 #此時不再任何空間中,當執行函式時會建立臨時命名空間進行儲存
6print(111111)
7
在函式中宣告的變數會放在區域性命名空間,當呼叫到該函式就會在記憶體中開闢乙個臨時空間記錄函式的變數資訊,當函式結束時空間也隨著消失
def func():
aaa = 1 當執行函式時候才會被記錄
python直譯器為我們提供的名字, list, tuple, str, int, print這些都是內建命名空間 . 這些函式我可以直接使用並不需要匯入什麼檔案.
內建空間中的函式比如builtins.py檔案
內建命名空間------>全域性空間-------->區域性空間
就進原則取值 區域性空間—>全域性空間——>內建空間
1 a=12def func():
3 a=2 #建立a物件並複製為2
4print(a) #輸出2,當區域性空間能找到該變數那麼就用這個,找不到就往上層找
python可以分兩種作用域
全域性作用域:內建命名空間 + 全域性命名空間
區域性作用域: 區域性空間
區域性作用域可以使用全域性作用域的變數,反過來則不行
1def func1():
2 a = 1
3def func2():
4print(a) 使用func1空間中的變數
56 func2()
7 func1()
globals 返回字典格式,內容是全域性作用域
>>> globals()
, '__builtins__': , 'func': , 'a': 1, 'b': 2}
locals 返回字典格式,內容是當前作用域
>>> def func_local():
... a=1
... print(locals())
...>>> func_local()
>>>
Python 命名空間
本文介紹python中命名空間中的legb原則。legb含 釋 l local function 函式內的名字空間,包括區域性變數和形參 e enclosing function locals 外部巢狀函式的名字空間 例如closure g global module 函式定義所在模組 檔案 的名字...
python 命名空間
作用域 第五章說過,將輸入字元作為命令放在作用域字典裡 作用域,每個函式都有乙個作用域,就是 字典,字典名字為函式名,鍵為變數,鍵值為變數對應的賦值。函式的作用域為區域性作用域 在函式內部訪問全域性變數,且只是讀取變數的值不重新繫結變數。這樣引用易出錯誤。慎重使用全域性變數 defcombine p...
python命名空間
區域性命名空間下def foo a a if name main foo 報錯資訊 unboundlocalerror local variable a referenced before assignment 全域性命名空間下if name main b b報錯資訊 nameerror name ...