欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

Python 装饰器深度解析:原理与应用场景

时间:2026年08月12日 05:40:34 浏览:1

Python 装饰器深度解析:原理与应用场景


装饰器是 Python 的高级特性,允许在不修改原函数的情况下扩展功能。


1. 基础装饰器


import time

def timer(func):
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():
time.sleep(1)
return "done"

2. 带参数的装饰器


def repeat(times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(times):
func(*args, **kwargs)
return wrapper
return decorator

@repeat(3)
def say_hello():
print("Hello")

3. 类装饰器


class CountCalls:
def __init__(self, func):
self.func = func
self.count = 0
def __call__(self, *args, **kwargs):
self.count += 1
print(f"Called {self.count} times")
return self.func(*args, **kwargs)

4. 保留元信息(functools.wraps)


from functools import wraps

def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper

装饰器广泛应用于日志、权限控制、缓存等场景。