命名空间加载顺序
-
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}
'''
|