Python装饰器的作用是为已有函数或类增强额外功能,decorator的功能有:
- 参数检查
确保传入函数的参数满足要求。
## python www.itzhimei.com 代码
def check(func):
def inner(x, y):
if x < 0 or y < 0:
raise ValueError('Arguments must be positive')
return func(x, y)
return inner
@check
def divide(a, b):
return a/b
- 权限校验
只有满足特定条件才能执行函数。
## python www.itzhimei.com 代码
def auth(func):
def inner(*args, **kwargs):
if check_auth():
return func(*args, **kwargs)
else:
raise PermissionError('Auth failed')
return inner
@auth
def delete_user(user_id):
pass
- 日志记录
自动记录函数的调用日志。
## python www.itzhimei.com 代码
def log(func):
def inner(*args, **kwargs):
print(f'Calling {func.__name__}')
return func(*args, **kwargs)
return inner
@log
def add(x, y):
return x + y
- 性能测试
计算函数执行时间。
## python www.itzhimei.com 代码
import time
def timer(func):
def inner(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f'{func.__name__} took {end-start} seconds')
return result
return inner
装饰器通过闭包实现在不修改函数源代码的条件下为其添加新功能,是一个非常强大和实用的设计模式。