在Python中,装饰器(Decorator)是一种特殊类型的函数,它允许我们在不修改原有函数定义的情况下,增加函数的新功能。装饰器本质上是一个函数,它接收一个函数作为参数并返回一个新的函数。
下面是一个简单的装饰器示例,它用于记录函数的执行时间:
import time
def timer(func):
"""装饰器函数,用于记录函数的执行时间"""
def wrapper(*args, **kwargs):
start_time = time.time() # 记录开始时间
result = func(*args, **kwargs) # 执行原函数
end_time = time.time() # 记录结束时间
print(f"Function {func.__name__} took {end_time - start_time:.6f} seconds to execute.")
return result
return wrapper
# 使用装饰器
@timer
def say_hello(name):
"""简单的函数,用于打印问候语"""
time.sleep(1) # 模拟耗时操作
print(f"Hello, {name}!")
# 调用函数
say_hello("Alice")
在这个例子中,`timer` 是一个装饰器函数,它接收一个函数 `func` 作为参数,并返回一个新的函数 `wrapper`。`wrapper` 函数在被调用时,会先记录当前时间,然后执行原函数 `func`,并再次记录时间以计算执行时间。最后,它打印出函数的执行时间,并返回原函数的执行结果。
通过 `@timer` 语法,我们很容易地将 `timer` 装饰器应用于 `say_hello` 函数上,而无需修改 `say_hello` 函数的内部实现。这样,我们就可以在不改变原有函数逻辑的情况下,为其增加新的功能。