???? 作者 :“大数据小禅”
???? 粉丝福利 :加入小禅的大数据社群
???? 欢迎小伙伴们 点赞????、收藏⭐、留言????
目录
Python中的装饰器及其应用
什么是装饰器模式
在不修改原有类的情况下去添加一个新的功能
从实际例子来看装饰器
这个时候,如果不想修改原有的函数,又想增加一个计算时间的功能,咋整?
另一种方式:
第二种方式并没有修改func函数的内部实现,而是使用装饰器模式对其功能进行装饰增强
Python中的装饰器及其应用
明月装饰了你的窗子,你装饰了别人的梦
什么是装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结*
构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提
供了额外的功能。
在不修改原有类的情况下去添加一个新的功能
import time start = time.time() #计算执行函数的时间 time.sleep(4) end = time.time() print(end - start) 输出: 4.000851154327393
import time start = time.time() #计算执行函数的时间 time.sleep(4) end = time.time() print(end - start) 输出: 4.000851154327393
import time def my_fun(): print("这是一个函数") def my_time(func): begin = time.time() #获取当前系统时间戳 time.sleep(2) func() #直接调用函数让它去执行上面的我们传入的函数。 end = time.time() print(end - begin) my_time(my_fun) #输出: 这里一个函数 2.0034534565
def print_cost(func): #这个装饰器说到底就是把我们要增加的一个功能,写在里面的一个wrapper里面,然后返回,然后在真正要修饰的一个函数里,加上@装饰器名字。 def wrapper(): #这个函数,要给my_fun()增加的功能都写在这里 begin = time.time() time.sleep(2) func() end = time.time() print(end - begin) return wrapper @print_cost def my_fun(): #上面的func,就等于是print_cost(my_func),这样子的用法。 print("这里一个函数") my_fun() #输出: 这里一个函数 2.000412702560425 import time def print_cost(func): def wrapper(): #这个函数,要给my_fun()增加的功能都写在这里 begin = time.time() time.sleep(1) print("stop") func() print("start") end = time.time() print(end - begin) return wrapper @print_cost def my_fun(): print("这里一个函数") my_fun() 输出: stop 这里一个函数 start 1.0000886917114258