1.做用域:變量或者函數的聲明週期
1.全局命名空間--> 咱們直接在py文件中, 函數外聲明的變量都屬於全局命名空間
2.局部命名空間--> 在函數中聲明的變量會放在局部命名空間
3.內置命名空間--> 存放python解釋器爲咱們提供的名字, list, tuple, str, int這些都是內置命名空間
# 最開始開闢一個本身的命名空間 -內置命名空間
#加載順序:內置=>全局=>局部
#取值順序: 局部==>全局==>內置
globals() # 查看全局做用域中的內容
locals() #查看當前做用域的內容
2.global nonlocal 對於外層變量 若是沒有相關關鍵字修飾的話 只能讀 不能改變
global a # 表示當前做用域使用的a是全局中的變量
這種 改變是危險的 共享的改變是危險的
還能夠定義一個全局的a(強制的)
nonlocal a # 找的是局部裏面,離他最近的上層的那個變量
直到找到爲止python
1 # 7, 下面代碼成立麼?若是不成立爲何報錯?怎麼解決? 2 # 7.1 3 #a = 2 4 # def wrapper(): 5 # print(a) 6 # wrapper() 7 # 不報錯 調用順序是局部、全局、內置 8 # 7.2 9 # a = 2 10 # def wrapper(): 11 # global a 12 # a += 1 13 # print(a) 14 # 15 # 16 # wrapper() 17 # 這個報錯 添加一個關鍵字 global,只能這個全局變量 不能改變 18 # 要改變的話 須要加 關鍵字global 19 # 7.3 20 # def wrapper(): 21 # a = 1 22 # def inner(): 23 # nonlocal a 24 # print(a) 25 # 26 # inner() 27 # wrapper() 28 # 不報錯 讀這個變量是能夠的 29 # 7.4 30 # def wrapper(): 31 # a = 1 32 # def inner(): 33 # a += 1 34 # print(a) 35 # inner() 36 # wrapper()