闭包定义
百度中搜索闭包,百度百科给长的定义 闭包就是能够读取其他函数内部变量的函数。从定义中可以看出,要形成闭包,至少要有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