Python装饰器:给函数“穿外套”的优雅艺术
你是否曾遇到过这样的场景——需要为多个函数添加相同的功能(比如计时、日志记录或权限验证)?如果每个函数都重复编写这些代码,不仅繁琐,还容易出错。今天,我们就来聊聊Python中解决这个问题的优雅方案:装饰器。
装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这就像给你的函数“穿上一件外套”,在不改变原有功能的基础上,添加额外行为。
来看个简单例子:假设我们需要计算函数执行时间。传统方式是在每个函数里编写计时代码,但使用装饰器可以这样做:
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 执行耗时: {end - start:.4f}秒")
return result
return wrapper
@timer_decorator
def heavy_calculation(n):
# 模拟耗时计算
time.sleep(1)
return n * 2
# 调用时自动计时
result = heavy_calculation(5)
@timer_decorator这一行就是装饰器的语法糖,它等价于 heavy_calculation = timer_decorator(heavy_calculation)。调用heavy_calculation()时,实际上执行的是装饰器返回的wrapper函数。
Python还内置了@staticmethod、@classmethod等常用装饰器。掌握装饰器不仅能让你写出更简洁、可维护的代码,更是深入理解Python函数式编程的关键一步。下次遇到需要“增强”函数功能的场景,不妨试试这个优雅的解决方案吧!