1、装饰器
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。
# 需求:万能的客户要求~在功能函数执行过程中,每个函数执行之前和执行之后
# 都打印xxx要执行了,xxx执行完了
# 解决方案1:在函数中,添加需要的代码
# ERROR:违反了软件设计开发的OCP原则[open close principle 开闭原则]
# 为了软件开发的稳定性而设计的原则,被广大项目组锁遵守
# 软件的功能扩展开放,软件的原有的功能修改关闭
#
#解决方案2:再函数调用的地方添加,需要的代码
# 操作太繁琐
# 容易造成代码的混乱
#
#解决方案3:PYTHON提供了装饰器函数,可以在不修改原有函数代码的情况下
# 通过添加装饰器函数的注解,给函数进行功能扩展
# 定义一个装饰器函数
def logging(fn):
def wrapper(*args,**kwargs):
print(">>>>>>>>>>>>函数准备执行")
result = fn(*args,**kwargs)
print("<<<<<<<<<<<<函数执行完了")
return result
return wrapper
@logging
def record_info():
print("模拟:记录用户信息的代码")
@logging
def show_info():
print("模拟:展示用户信息")
record_info()
show_info()
# >>>>>>>>>>>>函数准备执行
# 模拟:记录用户信息的代码
# <<<<<<<<<<<<函数执行完了
# >>>>>>>>>>>>函数准备执行
# 模拟:展示用户信息
# <<<<<<<<<<<<函数执行完了
2、装饰器的函数运行的流程
def decorators(fn):
def warapper(*args,**kwargs):
print("自定义功能,在函数前执行")
result = fn(*args,**kwargs)
print("自定义功能,在函数后执行")
return result
return warapper
@decorators
def show(name):
print("----------",name)
show("tom")
首先运行show函数,然后发现有装饰器注解,直接把函数当做参数传入到装饰器函数中,把show的参数传入wrapper中,然后result接受show函数运行的结果,返回结果到show(),return wrapper装饰器执行完,函数也就执行结束!