浅谈Python 中的闭包

闭包定义

百度中搜索闭包,百度百科给长的定义 闭包就是能够读取其他函数内部变量的函数。从定义中可以看出,要形成闭包,至少要有2个函数,且其中一个函数能够读取另一函数的内部变量。

Python 闭包函数的一般形式


def out(argv1,...):
 """
 功能块
 """
 def inner(argv,...):
         """
         功能块
         """
 return inner

在内部函数inner 中可以调用外部函数out的局部变量。
从这个形式中,可以看出装饰器就是一种闭包函数。

Python 闭包函数的特点

  • 调用闭包函数,其返回值类型为函数,返回值为内部函数
  • 闭包中外部函数定义的局部变量在函数执行后,暂不释放,留置给内部函数

Python 闭包函数的缺点

闭包中的局部变量不释放,将会占用内存空间,闭包过多会占用大量内存空间,严重可能会导致内存溢出。

Python 闭包函数的应用

  • python 闭包的一个典型应用就是装饰器
  • 由于闭包中的局部变量不释放,可以在闭包中添加 类对象, 类对象不释放, 可以用于编写单例模式

Python 闭包函数典型应用代码

下面的代码 为 robotframework 中robotlibcore.py 中的一段代码,https://github.com/robotframework/PythonLibCore
在此代码中,采用闭包实现装饰功能。


def keyword(name=None, tags=()):
    if callable(name):
        return keyword()(name)
    def decorator(func):
        func.robot_name = name
        func.robot_tags = tags
        return func
    return decorator

posted @ 2021-03-02 09:59  徐徐前行  阅读(308)  评论(0编辑  收藏  举报