內建 命名空間: python直譯器啟動之後就可以使用的變數\函式名
全域性 命名空間:在函式外面的變數名\函式名
區域性 命名空間: 每乙個函式都擁有自己的命名空間
python直譯器執行 載入順序:
所有 內建空間函式名\變數===》逐行 載入全域性空間變數\函式名
區域性空間的變數\函式名:在呼叫函式的時候產生,呼叫結束就消失
例如:
a = 1a = 3 #a = 3 把 a = 1 覆蓋
(a)
deflen_c():
pass
deflen_c():
pass2
print(len_c) #
是pass2 按載入順序,len_c覆蓋
作用域:乙個變數\函式名 可以使用的區域
全域性作用域: 內建空間 全域性空間 的變數名\函式名
區域性作用域: 區域性空間 變數名\函式名
作用域鏈:
下級能用上級,反之不能 單向
下級 用 上級 不能 改 (想改的話,global 可以修改全域性變數,nonlocal 修改區域性變數,當前沒有,向上級找,截止最後的區域性空間尋找,在找不到,報錯)
globals() 儲存了全域性變數和對應的值
print(globals)
locals() 儲存了當前空間變數和對應的值
locals()
命名空間說白了,可以看做乙個字典,字典key儲存了當前空間的所有變數,,key對應的值就是變數的值
如果想要修改全域性的變數:使用global關鍵字(盡量避免,會把全域性相同的變數都給更改,就完蛋了)
如果想要修改外層函式的變數:使用nonlocal(不影響全域性)
a = 』ddfdf『 #a 全域性空間 變數
def func1() #
func1 全域性空間 函式名
()
def func2() #
func2 全域性空間 函式名
func1 #
區域性空間 函式 函式func2內部沒有func1,就去上級去找 (作用域鏈)
a = 1 #
區域性空間 變數
print ()
函式巢狀:
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()
n = 1deffunc()
global
n n = n + 1 #
不僅僅用,還把全域性命名空間中的變數n的值修改了 (這種最好不用,太危險)
func()
print(n) #
2
n =0deffunc():
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) #
1
golbals() 全域性命名空間 的變數和值得集合 是個字典形式
locals() 區域性。。。。。。。。。。。。。
第一類物件:
函式名可以賦值
可以作為乙個資料結構的元素
可以作為乙個函式的引數
可以作為乙個函式的返回值
函式命名空間和作用域
內建 命名空間 python直譯器啟動之後就可以使用的變數 函式名 全域性 命名空間 在函式外面的變數名 函式名 區域性 命名空間 每乙個函式都擁有自己的命名空間 python直譯器執行 載入順序 所有 內建空間函式名 變數 逐行 載入全域性空間變數 函式名 區域性空間的變數 函式名 在呼叫函式的時...
函式 命名空間和作用域
一.命名空間。二.作用域 三函式的巢狀。今日新名詞 1 globals 函式 檢視全域性作用域的內容 2 locals 函式 檢視區域性作用域的內容 3 global 方法 呼叫全域性作用域的變數並獲得修改許可權 4 nonlocal 方法 呼叫區域性作用域的變數並獲得修改許可權.命名空間 用來存放...
函式 命名空間和作用域
就是繫結變數名和變數值的地方 1 內建命名空間 在python直譯器中已經存在的內建方法就可以稱之為內建命名空間 如 len print open 2 全域性命名空間 1 定義 在py檔案中,頂格寫的都是全域性命名空間 2 注意 while true 條件下的第一縮排也屬於在全域性命名空間 如圖 3...