>[success] # 可接受参数装饰器 ~~~ 1.定义三层闭包 2.最外层形参用来接收装饰器参数 3.第二层用来接受被修饰的装饰器函数 4.第三层用来被装饰函数的参数 5.其中在第二层对传入的装饰器参数进行重新定义 ~~~ >[danger] ##### 编写一个装饰器对结果进行重修累加 ~~~ 1.下面案例实际内部用法是 customSum(10, 20)(sum)(2,3),第一组10,20是装饰参数,第二层是被装饰函数 第三层是装饰函数的参数 ~~~ ~~~ from functools import wraps def customSum(a=None, b=None): def decorate(func): first = a if a else 0 second = b if b else 0 @wraps(func) # wrapper的参数传给 被装饰函数的 def wrapper(*args, **kwargs): result = func(*args, **kwargs) result = result + first + second return result return wrapper return decorate @customSum(10, 20) def sum(x, y): return x + y print(sum(2,3)) 打印结果: 35 ~~~