namespace 命名空間(命名空間)
內建 命名空間: python直譯器啟動之後就可以使用的變數\函式名
全域性 命名空間:在函式外面的變數名\函式名
區域性 命名空間: 每乙個函式都擁有自己的命名空間
python直譯器執行 載入順序:
所有 內建空間函式名\變數===》逐行 載入全域性空間變數\函式名
區域性空間的變數\函式名:在呼叫函式的時候產生,呼叫結束就消失
1乙個變數\函式名 可以使用的區域前面所講:
2 a = 1
3 a = 3 #
a = 3 把 a = 1 覆蓋
4print
(a)5
6def
len_c():
7pass
8def
len_c():
9pass2
10print(len_c) 是pass2 按載入順序,len_c覆蓋
全域性作用域: 內建空間 全域性空間 的變數名\函式名
區域性作用域: 區域性空間 變數名\函式名
下級能用上級,反之不能 單向
下級 用 上級 不能 改 (想改的話,global 可以修改全域性變數,nonlocal 修改區域性變數,當前沒有,向上級找,截止最後的區域性空間尋找,在找不到,報錯)
globals() 儲存了全域性變數和對應的值
print(globals)
locals() 儲存了當前空間變數和對應的值
locals()
命名空間說白了,可以看做乙個字典,字典key儲存了當前空間的所有變數,,key對應的值就是變數的值
如果想要修改全域性的變數:使用global關鍵字(盡量避免,會把全域性相同的變數都給更改,就完蛋了)
如果想要修改外層函式的變數:使用nonlocal(不影響全域性)
a = 』ddfdf『 #view codea 全域性空間 變數
def func1() #
func1 全域性空間 函式名
()
def func2() #
func2 全域性空間 函式名
func1 #
區域性空間 函式 函式func2內部沒有func1,就去上級去找 (作用域鏈)
a = 1 #
區域性空間 變數
()函式巢狀:
deffunc()
def func1() #
函式巢狀 定義
. .
func1
#函式巢狀 呼叫
(..)
--------n =0
deffunc1()
n = 1
deffunc2()
n = 2
deffunc3()
n =3
(n) func3()
#呼叫func3
(n) func2()
#呼叫 func2
(n)func1()
#呼叫func1
可以刪除變數n 試一試
deffunc ():
a =10b = 20
print(locals()) #
func()
------------
global
n = 1
deffunc()
global
n n = n + 1 #
不僅僅用,還把全域性命名空間中的變數n的值修改了 (這種最好不用,太危險)
func()
print(n) #
2--------n =0
deffunc():
n = 1
deffunc1():
deffunc2():
nonlocal n
#修改區域性變數 func2中沒有,向上找func1,也沒有,在向上func空間找,有變數n(如果還沒有,報錯)
n += 1
print(n) #
2func2()
func1()
func()
print(n) #
0n =0
deffunc():
n = 1
deffunc1():
deffunc2():
global n #
直接去全域性找n (如果全域性沒有,報錯)
n += 1
print(n) #
1func2()
func1()
func()
print(n) #
1golbals() 全域性命名空間 的變數和值得集合 就是個字典
locals() 區域性。。。。。。。。。。。。。
所以函式名是第一類物件
Python命名空間和作用域
乙個命名空間中不能有重名,但不同的命名空間是可以重名而沒有任何影響。命名空間的生命週期取決於物件的作用域,如果物件執行完成,則該命名空間的生命週期就結束。因此,我們無法從外部命名空間訪問內部命名空間的物件。內建作用域是通過乙個名為 builtin 的標準模組來實現的,預定義了哪些變數 python ...
Python命名空間和作用域
準備知識 1.在python直譯器開始執行之後,機會在記憶體中開闢乙個空間,每當遇到 乙個變數的時候,就把變數和值之間的關係記錄下來,但是當遇到函式定義 的時候,直譯器只是把函式名讀入記憶體,表示這個函式存在,至於函式內部 的變數和邏輯,直譯器是不關心的。也就是說一開始的時候函式只是載入進 來,僅此...
Python命名空間和作用域
一 命名空間namespacs 存放名字的地方,是對棧區的劃分 有了命名空間之後,就可以在棧區中存放相同的名字,詳細的,命名空間 分為三種 1.1 內建命名空間 存放的名字 存放的python直譯器內建的名字 print input 存活週期 python直譯器啟動則產生,python直譯器關閉則銷...