[Python3]函数进阶--名称空间、作用域、闭包

名称空间共3种:
    locals:是函数内的名称空间,包括局部变量和形参
    globals:全局变量,打印这个程序所有的变量
    builtins:内置模块的名字空间

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

作用域即范围
    全局范围:全局存货,全局有效
    局部范围:临时存货,局部有效

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

作用域的查找顺序
    LEGB  代表名字查找顺序:locals -> enclosing function -> globals -> __builtins__
    L:locals:是函数内的名字空间,包括局部变量和形参
    E: enclosing:外部嵌套函数的名字空间  相邻的上一级
    G: globals:全局变量,打印这个程序所有的变量
    B: builtins:内置模块的名字空间

闭包
     关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。
     def outer():
        name = 'alex'

        def inner():
            print("在inner里打印外层函数的变量",name)

        return inner


    f = outer() 

    f()
    闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

猜你喜欢

转载自blog.csdn.net/TynMhxx/article/details/81148996