python闭包closure

作者: 王吉吉real | 来源:发表于2017-10-19 23:15 被阅读0次

    一、概念

    闭包(closure)是一种引用了非局部变量(non-local variable)的内嵌函数(nested function)。

    名词解释:

    内嵌函数(nested function):定义在其他函数内部的函数叫内嵌函数。内嵌函数可以访问所定义在的外部函数内的变量。

    非局部变量:非局部变量(non-local variable)在python中默认只读,如果想要修改它,就需要声明为nonlocal变量(使用nonlocal关键词,python 3.X以后添加的)。

    来定义一个闭包:

    ```

    def print_msg(msg):

    #this is the outer enclosing function

    def printer():

    #this is the nested function

    print(msg)

    return printer

    another_print = print_msg("hello")

    another_print()

    ```

    上面这种关联着数据的代码块就是python中的闭包了。而且变量的取值会被保留,即使闭包超出了该变量的作用范围或者外部的函数被删除。

    二、条件

    满足什么条件才能被称为闭包呢?

    像上面的例子一样,满足了以下3个条件:

    1、需要有一个内嵌函数(定义在函数中的函数);

    2、内嵌函数需要引用定义在外部函数中变量;

    3、内嵌函数需要被返回;

    三、场景

    最常使用闭包的场景可以归纳为以下几种:

    1、在一个类中只有非常少的方法(通常是只有一个);

    2、避免使用全局变量的时候;

    3、装饰器模式中;

    4、提供一致的函数签名;

    相关文章

      网友评论

        本文标题:python闭包closure

        本文链接:https://www.haomeiwen.com/subject/olxmuxtx.html