记忆总结:
装饰器 = 给函数添加装饰,不改动函数本身,额外加功能。
1、什么是装饰器?
本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。以下是简单的装饰器示例:
# 装饰器的测试!def ff(fun): def wrapper(): print("------- start加强 ---------") fun() print("------- end加强 ---------") return wrapperdef f1(): print("f1执行了.....")# 把f1函数传递到ff函数中:包装执行!!!xx = ff(f1)xx()
def haha(fun): def wrapper(): print("------- start加强 ---------") fun() print("------- end加强 ---------") return wrapper# 🔥 这里加 @ff 就是语法糖!等价于 ff(f1)@hahadef f1(): print("f1执行了.....")# 直接调用 f1() 就行!不用 xx = ff(f1)f1()
调用 f1() 时:
# 🔥 带参数的装饰器(三层函数)def outer(msg): # 第一层:接收参数执行返回装饰器! def middle(func): # 第二层:普通装饰器,接收原函数 def wrapper(): # 第三层:真正包装 print(f"--- {msg} ---") # 使用装饰器传的参数 func() # 执行原函数 return wrapper return middle# ------------------- 使用 -------------------@outer("我是装饰器传进来的参数!") # 理解为:outer()执行完毕返回函数middledef f1(): print("f1 执行了")f1()
直观理解: @outer("我是装饰器传进来的参数!") @outer("我是装饰器传进来的参数!") # 理解为:outer()执行完毕返回函数middle相当于如下:@middledef f1(): print("f1 执行了")