Python 基础 -2.4 函数进阶

Posted 如果迎着风就飞,俯瞰这世界有多美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 基础 -2.4 函数进阶相关的知识,希望对你有一定的参考价值。

名称空间

又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方

名称空间共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()

问题:在inner()里的打印的n的值是多少?

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

  • locals 是函数内的名字空间,包括局部变量和形参
  • enclosing 外部嵌套函数的名字空间
  • globals 全局变量,函数定义所在模块的名字空间
  • builtins 内置模块的名字空间 

闭包

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

def outer():
    name = ‘alex‘

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

    return inner


f = outer() 

f()

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

装饰器

 

以上是关于Python 基础 -2.4 函数进阶的主要内容,如果未能解决你的问题,请参考以下文章

python语法基础-函数-进阶-长期维护

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

清华大佬超详细讲解进阶学Python之 Python的函数基础

小白学习之路,基础四(函数的进阶)

Python 基础进阶

Python基础九函数进阶