命名空间加载顺序
-
python解释器启动加载:内置命名空间
-
执行.py文件加载:全局命名空间
-
调用函数产生:局部命名空间
名字查找顺序:
-
LEGB法则:locals -> enclosing function -> globals -> builtins
-
局部命名空间 --->闭包函数命名空间 ---> 全局命名空间 ---> 内置命名空间
globals() #返回全局作用域中 变量:值 组成的字典
locals() #返回局部作用域中 变量:值 组成的字典
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
a_global = 1
def func(pram1):
"普通函数"
a_local = 2
print(globals())
print(locals())
def encFunc(parm2):
"闭包函数"
out_local = 3
print('outer:', globals())
print('outer:', locals())
def innerFunc(parm3):
in_local = 4
print('inner:',globals())
print('inner:', locals())
return innerFunc
func(3)
encFunc(3)
encFunc(3)(1)
'''输出:
{...省略...,'a_global': 1, 'func': <function func at 0x0000017B61A52E18>, 'encFunc': <function encFunc at 0x0000017B63735378>}
{'a_local': 2, 'pram1': 3}
outer: {...省略...,'a_global': 1, 'func': <function func at 0x0000015BDAFC2E18>, 'encFunc': <function encFunc at 0x0000015BDB195378>}
outer: {...省略...,'out_local': 3, 'parm2': 3}
inner: {...省略...,'a_global': 1, 'func': <function func at 0x00000145A9492E18>, 'encFunc': <function encFunc at 0x00000145AB185378>}
inner: {'in_local': 4, 'parm3': 1}
'''
|