一、装饰器的简介
可以在不修改原函数的情况下扩展旧函数得到新函数
二、装饰器的使用方法
1.在不修改原函数的情况下,来对函数进行扩展
defadd(a,b): f=a+breturnfdefnew_add(a,b): print('计算开始。。。') r=add(a,b) print('计算结束。。。') returnrr=new_add(111,222) print(r)
上边的方式,已经可以在不修改源代码的情况下对函数进行扩展了
但是这种方式要求我们每扩展一个函数就要手动创建一个新函数。
2.为了解决这个问题,我们创建一个函数,让这个函数可以自动的帮助我们生产函数,我们需要的是一个新函数可以对旧函数进行扩展
defadd(a,b): f=a+breturnfdefnul(a,b): f=a*breturnfdeffn(): return'这里是fn函数'defbegin_end(old): ''' 用来对其他函数进行扩展,使其他函数可以在执行前打印开始打印, 执行后打印结束打印 参数:old 要扩展的函数对象 '''# 创建一个新函数defnew_function(*args , **kwargs): print('开始执行') # 调用被扩展的函数result=old(*args , **kwargs) print('执行结束') returnresult# 返回新函数returnnew_functionf=begin_end(fn) f2=begin_end(add) print(f()) print(f2(1,2))
三、装饰器的好处
1.可以修改多个函数
2.方便后期的维护
3.不违反开闭原则(OCP)