9 函数进阶---命名空间

名称空间共3种,分别如下

  • locals: 是函数内的名称空间,包括局部变量和形参

  • globals: 全局变量,函数定义所在模块的名字空间

  • builtins: 内置模块的名字空间

不同变量的作用域不同就是由这个变量所在的命名空间决定的。

作用域即范围

  • 全局范围:全局存活,全局有效

  • 局部范围:临时存活,局部有效

查看作用域方法 globals(),locals()

作用域的查找顺序

level = 'L0'
n = 22

def func():
    level = 'L1'
    n = 33
    print(locals())

    def outer():
        n = 44
        level = 'L2'
        print(locals(),n)
     
        def inner():
            level = 'L3'
            print(locals(),n) #此外打印的n是多少?
        inner()
    outer()

func()

# 输出
{'n': 33, 'level': 'L1'}
{'level': 'L2', 'n': 44} 44
{'level': 'L3', 'n': 44} 44

LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> builtins

  • cals 是函数内的名字空间,包括局部变量和形参
  • closing 外部嵌套函数的名字空间
  • obals 全局变量,函数定义所在模块的名字空间
  • iltins 内置模块的名字空间
posted @ 2019-10-12 08:29  不要找借口  阅读(103)  评论(0编辑  收藏  举报