Python装饰器的作用
用于增强扩展Python函数或类功能的一种语法糖,类似与装饰者模式,还具备解耦的功能。
此语法糖在Python使用极其广泛,Python开发必备技能之一,常见使用于日志,性能检测,权限判断等。
以下用几个例子,由浅入深的了解装饰器。
Python装饰器的类型
- 函数/类方法装饰器
- 装饰器类(用类装饰一个函数)
- 类的装饰器(用函数装饰器装饰一个类)
函数装饰器
函数装饰器分为两种,不带参数的与带参数的。
最简单的装饰器
# 例子1 一个最简单的装饰器
import time
# 自定义一个名为simple_decorator的装饰器
def simple_decorator(func): # func代表被装饰的函数
def wrapper(*args, **kwargs): # *args, **kwargs代表被装饰函数的参数
return func()
return wrapper
# 使用simple_decorator装饰器装饰doing函数
@simple_decorator
def doing():
time.sleep(1)
doing()
不带参数的函数装饰器
# 例子2 在例子1的基础上增加对函数调用时间的输出功能
import time
def simple_decorator(func):
def wrapper(*args, **kwargs):
call_begin_time = time.time()
func()
cost_time = time.time() - call_begin_time
print(f'调用{func.__name__}函数花费了:{cost_time}秒。')
return wrapper
@simple_decorator
def doing():
time.sleep(1)
doing()
==============================
输出结果:
调用doing函数花费了:1.012902021408081秒。
进程已结束,退出代码为 0
带参数的函数装饰器
# 例子3 带参数的函数装饰器需要套3层