Python 装饰器:5 分钟理解原理与用法
·
Python 装饰器:5 分钟快速理解
核心原理
装饰器本质上是高阶函数,其核心机制是:
- 接受一个函数作为输入
- 返回一个新函数作为输出
- 在不修改原函数代码的前提下增强功能
用数学表示函数变换过程: $$f_{decorated} = \text{decorator}(f_{original})$$
基础用法示例
# 定义装饰器
def simple_decorator(func):
def wrapper():
print("函数执行前")
func() # 调用原函数
print("函数执行后")
return wrapper
# 使用装饰器
@simple_decorator
def greet():
print("Hello!")
# 调用被装饰的函数
greet()
输出结果:
函数执行前
Hello!
函数执行后
关键特性
- 语法糖:
@decorator等价于func = decorator(func) - 叠加使用:支持多个装饰器
@decorator1 @decorator2 def func(): ... - 参数传递:处理带参数的函数
def universal_decorator(func): def wrapper(*args, **kwargs): print("参数处理") return func(*args, **kwargs) return wrapper
实用场景
-
性能监控(计时器):
import time def timer(func): def wrapper(*args): start = time.time() result = func(*args) print(f"耗时: {time.time()-start:.4f}秒") return result return wrapper -
权限验证:
def login_required(func): def wrapper(user): if user.is_authenticated: return func(user) else: raise PermissionError("请先登录") return wrapper
进阶技巧
- 带参数的装饰器:创建返回装饰器的函数
def repeat(n): # 装饰器工厂 def decorator(func): def wrapper(*args): for _ in range(n): func(*args) return wrapper return decorator
理解要点
- 装饰器在函数定义时立即执行
wrapper函数应使用functools.wraps保留原函数信息- 类也可以作为装饰器(需实现
__call__方法)
通过这种机制,只需添加一行 @decorator 就能实现功能扩展,大幅提升代码复用性和可维护性。
更多推荐


所有评论(0)