Python闭包

作者: 卷卷_麦芽呀 | 来源:发表于2018-03-22 10:36 被阅读1次

    闭包

    ⑴ 定义

    函数中嵌套了一个函数。最外层的函数我们称为“外部函数”,嵌套在内的函数我们称为“内部函数”。内部函数中引用了外部函数的变量,但不能引用全局变量,且外部函数的返回值为内部函数的函数名。此时,便构成了一个闭包。

    (如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。

    闭包:

    在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包)

    简言之,当函数满足以下结构时,我们可以将其视为闭包。

    def outer_function():
        """
        外部函数
        """
        outer_var = value   # 定义变量 outer_var,value可以是任何值
    
        def inner_function():
            """
            内部函数
            """
            print('引用变量:', outer_var)   # 引用外部函数的变量
    
        return inner_function   # 外部函数的返回值为内部函数名
    
    

    ⑵ 必需条件

    • 必须存在函数嵌套。

    • 内部函数必须引用外部函数的变量。

    • 内部函数必须不能引用全局变量。

    • 外部函数的返回值必须是内部函数的函数名。

    ⑶ 变量内存的释放

    通常情况下,当一个函数运行结束,函数内部的所有东西都会释放掉,还给内存,函数的局部变量也会因此消失。然而,闭包是一种特殊情况,如果外部函数在结束时发现其变量会在内部函数中被使用,就会把这个变量绑定给内部函数,然后再结束自己的运行。

    ⑷ 简单闭包的举例

    简单闭包的举例

    ⑸ 闭包的特有属性

    只要是闭包,都有 __closure__ 属性。该属性返回闭包应用外围作用域(即外部函数中)的变量内存地址,结果是一个元组。语法为:外部函数().__closure__

    如果函数不是闭包,则 __closure__ 返回“None”。

    可以通过打印 外部函数().__closure__[数字].cell_contents 来获取外部函数变量的值。其中,“数字”即为元组元素的索引,从0开始。

    例如:

    闭包的特有属性

    相关文章

      网友评论

        本文标题:Python闭包

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