Python装饰器


在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` 函数的内部实现。这样,我们就可以在不改变原有函数逻辑的情况下,为其增加新的功能。