Python装饰器实战指南
Python装饰器是一种强大的语法特性,可以在不修改函数代码的情况下增强函数功能。
1. 基础装饰器
最简单的装饰器就是一个接受函数并返回新函数的高阶函数:
def timer(func):
import time
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__} took {time.time()-start:.2f}s")
return result
return wrapper
@timer
def slow_function():
import time
time.sleep(1)
return "done"
2. 带参数的装饰器
如果装饰器本身需要参数,就需要再嵌套一层函数:
def retry(max_attempts=3):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception as e:
if i == max_attempts - 1:
raise
print(f"Attempt {i+1} failed: {e}")
return wrapper
return decorator
3. 实际应用场景
- 权限校验:在Web开发中检查用户是否登录
- 缓存:对耗时函数的结果进行缓存
- 日志:自动记录函数调用和参数
- 重试:对可能失败的操作自动重试
掌握装饰器是Python进阶的关键一步,建议多加练习。