9 函数进阶---命名空间
名称空间共3种,分别如下
-
locals: 是函数内的名称空间,包括局部变量和形参
-
globals: 全局变量,函数定义所在模块的名字空间
-
builtins: 内置模块的名字空间
不同变量的作用域不同就是由这个变量所在的命名空间决定的。
作用域即范围
-
全局范围:全局存活,全局有效
-
局部范围:临时存活,局部有效
查看作用域方法 globals(),locals()
作用域的查找顺序:
level = 'L0'
n = 22
def func():
level = 'L1'
n = 33
print(locals())
def outer():
n = 44
level = 'L2'
print(locals(),n)
def inner():
level = 'L3'
print(locals(),n) #此外打印的n是多少?
inner()
outer()
func()
# 输出
{'n': 33, 'level': 'L1'}
{'level': 'L2', 'n': 44} 44
{'level': 'L3', 'n': 44} 44
LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> builtins
- cals 是函数内的名字空间,包括局部变量和形参
- closing 外部嵌套函数的名字空间
- obals 全局变量,函数定义所在模块的名字空间
- iltins 内置模块的名字空间