python入门到精通python装饰器的应用详解
Posted 大数据小禅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python入门到精通python装饰器的应用详解相关的知识,希望对你有一定的参考价值。
🚀 作者 :“大数据小禅”
🚀 粉丝福利 :加入小禅的大数据社群
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
目录
Python中的装饰器及其应用
- 明月装饰了你的窗子,你装饰了别人的梦
什么是装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结*
构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提
供了额外的功能。
在不修改原有类的情况下去添加一个新的功能
import time
start = time.time() #计算执行函数的时间
time.sleep(4)
end = time.time()
print(end - start)
输出:
4.000851154327393
从实际例子来看装饰器
def my_fun():
print("这是一个函数")
my_fun()
这个时候,如果不想修改原有的函数,又想增加一个计算时间的功能,咋整?
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
第二种方式并没有修改func函数的内部实现,而是使用装饰器模式对其功能进行装饰增强
以上是关于python入门到精通python装饰器的应用详解的主要内容,如果未能解决你的问题,请参考以下文章