Python装饰器:优雅地增强函数功能
在Python中,装饰器是一种强大的语法特性,它允许我们在不修改原函数代码的情况下,为函数添加新功能。这种基于闭包的语法糖,让代码变得更加优雅和可复用。
装饰器基础
装饰器的本质是一个接受函数作为参数的高阶函数。最基本的装饰器形式如下:
def my_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
输出:
函数执行前
Hello!
函数执行后
实用场景
- 性能监控:计算函数执行时间
- 权限验证:检查用户权限后再执行函数
- 日志记录:自动记录函数调用信息
- 缓存机制:实现函数结果的缓存
带参数的装饰器
装饰器还可以接受参数,提供更大的灵活性:
def repeat(num_times):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(num_times=3)
def greet(name):
print(f"Hello {name}")
greet("World")
最佳实践
使用functools.wraps可以保留原函数的元信息,这是编写装饰器时的良好习惯:
from functools import wraps
def timer(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 计时逻辑
return func(*args, **kwargs)
return wrapper
装饰器让代码更加模块化和可维护,是每个Python开发者都应该掌握的利器。通过合理使用装饰器,我们可以写出更加简洁、优雅的代码。