命名空间与作用域

命名空间加载顺序

  • 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}
'''

猜你喜欢

转载自www.cnblogs.com/rons/p/9064844.html