python函数名称空间,,一、命名空间概念命名


一、命名空间概念

命名空间(name space),若变量x=1,1存放在内存中,命名空间是存放名字x、x与1绑定关系的地方。
命名空间分三种:

locals:函数内的名称空间,包括局部变量和形参 globals:全局变量,函数定义所在模块的名字空间
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函数名称空间

评论关闭