装饰器:装饰器为主,闭包和高阶函数为辅
装饰器 = 高阶函数 + 闭包
1.什么是闭包;
# 闭包:就是不执行,等待调用状态 def fun(): print("执行函数") f = fun print(type(f),f) # <class 'function'> <function fun at 0x000002139B203438>
2.什么是高阶函数
#高阶函数:只要参数或者返回值是函数那么就是高阶函数 def fun1(): pass def superFun(fun): pass fun = fun1 superFun(fun)
3.1基本装饰器
# 目的:在不改变源代码的前提下,添加功能 def beforFun(fun): def inner(*args,**kwargs): print(f"业务代码{args},{kwargs}") return fun(*args,**kwargs) return inner @beforFun def main(key): print("主函数") main(6)
3.2带参数的装饰器
# 目的:在不改变源代码的前提下,添加功能 def HHHH(key): def beforFun(fun): def inner(*args, **kwargs): print(key) print(f"业务代码{args},{kwargs}") return fun(*args, **kwargs) return inner return beforFun @HHHH("hhhhhh") def main(a): print("主函数") main(6)
4.如果要保留装饰器原函数 的基本属性
# 在装饰器中使用,保留原函数的属性,加上wraps from functools import wraps
-----------------------------------------------------------------------------------------------------------------------------------------