1.修饰器是什么?
修饰器是一种以函数为参数,为该函数添加额外功能,并返回被修饰过的函数的函数。
2.修饰器类别
1)不带参数的修饰器
- 1 import time
- 2 def showtime(func):
- 3 def wrapper():
- 4 start_time = time.time()
- 5 func()
- 6 end_time = time.time()
- 7 print('spend is {}'.format(end_time - start_time))
- 8
- 9 return wrapper
- 10
- 11 def foo():
- 12 print('foo..')
- 13 time.sleep(3)
- 14
- 15 foo = showtime(foo)
- 16
- 17 @showtime # 17-20行代码等价于11-15行代码
- 18 def foo():
- 19 print('foo..')
- 20 time.sleep(3)
- ————————————————
- 版权声明:本文为CSDN博主「探索未知的自己」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- 原文链接:https://blog.csdn.net/u013380694/article/details/90019571
2)带有参数的修饰器
以下文代码为例,需要在showtime函数外部添加函数达到为修饰器提供额外参数的目的。
- 1 import time
- 2 def time_logger(flag = 0):
- 3 def showtime(func):
- 4 def wrapper(a, b):
- 5 start_time = time.time()
- 6 func(a,b)
- 7 end_time = time.time()
- 8 print('spend is {}'.format(end_time - start_time))
- 9
- 10 if flag:
- 11 print('将此操作保留至日志')
- 12
- 13 return wrapper
- 14
- 15 return showtime
- 16
- 17 @time_logger(2) #得到闭包函数showtime,add = showtime(add)
- 18 def add(a, b):
- 19 print(a+b)
- 20 time.sleep(1)
- 21
- 22 add(3,4)
- ————————————————
- 版权声明:本文为CSDN博主「探索未知的自己」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- 原文链接:https://blog.csdn.net/u013380694/article/details/90019571
3)将类的构造函数重载为修饰器
3.python中常用的修饰器
1)classmethod()
在类中使用该修饰器后,不用实例化对象也可以调用类的方法或属性。
2)staticmethod()
使用该修饰器后会返回函数的静态方法。
4.修饰器优缺点
优点:提高代码复用性
缺点:增加代码的复杂性,排查错误更加困难
5.参考资料
从浅到深讲解python修饰器 – 子狼 – 博客园
python 闭包和装饰器详解_shine的博客-CSDN博客_python 闭包
Python3基础之: Decorator (修饰器) – 知乎