什么是闭包?
内外函数嵌套,内函数引用外函数作用域下的非全局变量,外函数返回内函数对象,
优点:为变量续命
缺点:浪费内存
具体的代码实现
def fun1(num1,num2):
def fun2():
#内函数引用外函数作用域下的非全局变量
return num1 + num2
#返回内函数变量
return fun2
#调用外函数对象
num = fun1(1,3)()
#打印结果
print(num)
什么是装饰器?
利用闭包的思路在不改变原函数的情况下给函数增加新的功能
代码实现
def outer1(func):
def inner(*args,**kwargs):
print("装饰器函数1开始执行") 1
print("特殊校验功能1的执行")2
func(*args,**kwargs)
print("装饰器函数1结束执行")3
return inner
def outer2(func):
def inner(*args,**kwargs):
print("装饰器函数2开始执行")4
print("特殊校验功能2的执行")5
func(*args,**kwargs)
print("装饰器函数2结束执行")6
return inner
@outer1 # 给addNum函数添加一个outer1装饰器
@outer2 # 给addNum函数添加一个outer2装饰器
def addNum(a, b,c,d):
print("a+b+c+d = ", (a+b+c+d))
addNum(10, 20, 30, 40)
#执行顺序
"""
装饰器函数1开始执行
特殊校验功能1的执行
装饰器函数2开始执行
特殊校验功能2的执行
a+b+c+d = 100
装饰器函数2结束执行
装饰器函数1结束执行
"""