1. 条件 - 在外部函数中定义了内部函数 - 外边函数就是有返回值 - 返回值就是:内部函数名 - 内部函数引用了外部函数的变量
2. 格式
def 外部函数(): a = 100 def 内部函数(): print(a) return 内部函数(): x = 外部函数() x接收return返回值 x() 调用内部函数3. 闭包缺点
作用域没有那么直观因为变量不会被垃圾回收所以有一定的内存占用问题4. 闭包作用:
可以使用同级作用域读取其他元素的内部变量延长作用域5. 闭包总结
闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存闭包的好处,使代码变得简洁,便于阅读代码闭包是理解装饰器的基础特点:
函数A是作为函数出现的(函数B就接收函数A作为参数)要有闭包的特点执行装饰器函数离谁最近先执行谁如果装饰器是多层的,谁距离近就优先使用哪个装饰器 def decorate(func): def wrapper(*args,**kwargs): func(*args) #原函数 print('----------') return wrapper @decorate def f1(*args): pass