python函数名称空间,,一、命名空间概念命名
python函数名称空间,,一、命名空间概念命名
一、命名空间概念 |
命名空间(name space),若变量x=1,1存放在内存中,命名空间是存放名字x、x与1绑定关系的地方。
命名空间分三种:
builtins:内置模块的名字空间 dir(__builtins__)查看所有内置方法
作用域:python中一个函数就是一个作用域,局部变量放置在其作用域中;代码定义完成后,作用域已经完成,作用域链向上查找
C# Java中作用域{}
不同变量的作用域不同就是由这个变量所在的命名空间决定的:
作用域即范围:
全局范围:全局存活,全局有效
局部范围:临时存活,局部有效
二、作用域查找顺序 |
LEGB:locals ——>enclosing(相邻的上一级) ——>globals ——> __builtins__locals 是函数内的名字空间,包括局部变量和形参enclosing 外部嵌套函数的名字空间globals 全局变量,函数定义所在模块的名字空间builtins 内置模块的名字空间
n = 10def fun1(): n = 20 print(‘func1‘,n) def fun2(): n = 30 print(‘func2‘,n) def func3(): print("func3",n) # locals没有,先找相邻上一级作用域 func3() # 20 fun2() # 30 fun1() # 30
def func(): level = ‘L1‘ n = 33 print(locals()) # {‘level‘: ‘L1‘, ‘n‘: 33} def outer(): n = 44 level = ‘L2‘ print(locals(), n) def inner(): level = ‘L3‘ print(locals(), n) inner() # {‘n‘: 44, ‘level‘: ‘L3‘} 44 outer() # {‘n‘: 44, ‘level‘: ‘L2‘} 44func()
三、嵌套函数返回值 |
age = 18def func1(): age = 73 def func2(): age = 84 print(age) return 666val = func1()print(val)‘‘‘输出:666‘‘‘# 函数名可以当作返回值age = 18def func1(): age = 73 def func2():... return func2 # 返回一个函数名# val = func1()print(val)‘‘‘输出:<function func1.<locals>.func2 at 0x101462598>‘‘‘# 代码写完之后作用域已经生成,不管函数名传到哪里,只要执行都回回定义的地方往上找age = 18def func1(): age = 73 def func2(): print(age) return func2 # 返回一个函数名不带括号val = func1()val()‘‘‘输出结果:73‘‘‘
四、查看作用域方法 |
globals(),locals()
python函数名称空间
评论关闭