Python闭包

闭包

⑴ 定义

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

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

闭包:

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

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

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开始。

例如:

闭包的特有属性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。