函数进阶之命名空间

命名空间是名称到对象的映射。命名空间是一个字典的实现,键为变量名,值是变量对应的值。各个命名空间是独立没有关系的,一个命名空间中不能有重名,但是不同的命名空间可以重名而没有任何影响。

x = 1
在内存中是{x:4304947712} x对应的是1的内存地址

名称空间分三种

locals: 是函数内的名称空间,包括局部变量和形参。
globals: 全局变量,函数定义所在模块的名字空间,也就是打印出这个程序的所有变量。
builtins: 内置模块的名字空间

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

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

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

作用域的查找顺序

LEGB
L:locals
E: enclosing 相邻的上级
G: globals
B: builtins


例子
n = 10


def func():
    n = 20
    print('func', n)

    def func2():
        n = 30
        print('func2', n)

        def func3():
            print('func3:', n)

        func3()

    func2()


func()
# func 20
# func2 30
# func3: 30

猜你喜欢

转载自www.cnblogs.com/lshedward/p/9970434.html
今日推荐