深入理解Python装饰器
什么是装饰器?
装饰器(Decorator)是Python中一种强大的语法特性,它允许你在不修改原函数代码的情况下,为函数添加新的功能。
装饰器本质上是一个高阶函数,它接受一个函数作为参数并返回一个新的函数。
基本装饰器
def my_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# 输出:
# 函数执行前
# Hello!
# 函数执行后
带参数的装饰器
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"你好, {name}!")
greet("Python")
类装饰器
class Timer:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
import time
start = time.time()
result = self.func(*args, **kwargs)
end = time.time()
print(f"执行时间: {end - start:.4f}秒")
return result
@Timer
def slow_function():
import time
time.sleep(1)
return "完成"
实际应用场景
| 场景 | 装饰器示例 | 说明 |
|---|---|---|
| 日志记录 | @log | 记录函数调用信息 |
| 权限验证 | @requires_auth | 检查用户权限 |
| 缓存 | @cache | 缓存函数结果 |
| 重试 | @retry(3) | 失败时自动重试 |
| 计时 | @timer | 测量执行时间 |
总结
装饰器是Python中非常优雅的代码复用方式,掌握它能让你的代码更加简洁和可维护。
本文介绍了Python装饰器的基础知识和进阶用法。
