命名空间和作用域 global 和nonlocal
全局名称空间:存放的是py文件中变量与值的对应关系
局部名称空间(临时名称空间):存放的是函数体里面的变量与值的对应关系
内置名称空间:存放内置函数,关键字等,print(),int
作用域:
(1)全局作用域:内置名称空间,全局名称空间
(2)局部作用域:局部名称空间
加载顺序:加载到内存的顺序
内置名称空间 ---> 全局名称空间 ---> (当函数执行时)局部名称空间
取值顺序:(就近原则)
LEGB 原则 局部名称空间 ---> 全局名称空间 ---> 内置名称空间
globals()和locals()函数
print(globals()) # 返回一个字典:包含全局作用域所有的内容
print(locals()) # 返回一个字典:当前作用域的所有内容
关键字:global nonlocal
global :
(1)可以局部作用域声明一个全局变量
(2)局部作用域不能对全局作用域的变量进行修改,只能引用,通过设置global可以修改。(限于字符串,数字)
ps:对可变数据类型(list,dict,set)可以直接引用不用通过global。
nonlocal : 只在python3x中 存在。
(1)函数中的变量加nonlocal后也不能操控全局变量。
(2)变量加nonloc只争对在局部作用域下对变量进行修改,并且引用的哪层,从那层及以下此变量全部发生改变。
def wrapper(): name = 'rock' def inner(): nonlocal name name += 'b' # print(name) print('1', name) inner() print('2', name) wrapper()