計算機或程序底部自有的空間python
全局名稱空間包括全局空間和內置空間,能夠訪問第一層的內容函數
局部的空間,沒有內置和全局權限大ui
a = 10 # 全局名稱空間中的內容 b = 10 def fn(): # fn也在全局名稱空間 b = 20 # 局部名稱空間 print(b) def gn(): a = 30 print(a) fn() >>>#結果: 10 gn() >>>#結果: 30
內置+全局spa
能夠訪問所有的內容,也有權修改code
局部(函數被調用)blog
只可修改當前參差空間的內容,若是想修改全局做用域的內容在第一行寫global+調用的內容,再加以修改作用域
a = 110 # 全局 def fn(): # b = 20 # 局部 def gn(): # 局部 print(globals()) # 能夠查看全局做用域中的內容 :>>> '__name__': '__main__', '__doc__': None, # '__package__': None, '__loader__': # <_frozen_importlib_external.SourceFileLoader object at 0x00000150A1ECFEF0>, # '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': # 'E:/python全棧15期/day11/code/04 名稱空間.py', '__cached__': None, # 'a': 110, 'fn': <function fn at 0x00000150A1E8C1E0>} >>>(a在全局中,fn也在全局中) print(locals()) # 查看當前做用域中的內容 >>> 當前層次局部做用域沒有內容,因此返回一個{} gn() fn() #先調用 函數 fn 再定義函數gn,再調用函數gn
函數能夠互相的嵌套io
a = 1 # 01 def fun_1(): #03 a = 2 # 05 def fun_2(): #07 global a a = 3 #09 def fun_3(): #11 a = 4 #13 print(a) #14 print(a) #10 >>>結果: 3 fun_3() # 12 >>>結果:函數fun_3最後是 4 print(a) #15>>> 結果 : 3 print(a) #06 >>>結果:2 fun_2() #08 print(a) #16 >>> 結果: 2 print(a) #02 >>> 結果: 1 fun_1() #04 >>>fun_1函數最終結果 2 print(a) # 17 >>> 結果: 3 #>>> 因此最終輸出爲 1,2,3,4,3,2,3
global和nonlocal關鍵function
a = 30 def func(): print(a) func() >>> # 30 print(a) >>>#30
a = 30 def func(): global a # 1. 能夠把全局中的內容引入到函數內部 , 2. 在全局建立一個變量 a = 20 print(a) func() >>> # 結果: 20 print(a) >>>#結果: 20 global把全局那個變量a 修改了
a = 10 def outer(): a = 40 def inner(): # 在inner中改變a的值 nonlocal a # 尋找外層函數中離他最近的那個變量,但不會找到全局那個變量 print(a) # 40 inner() outer() >>> # 結果 40 print(a) >>> # 結果 10