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()