简述对装饰器的理解,并写出一个计时器记录方法执行性能的装饰器? ?

装饰器(Decorator)是Python中的一个高级功能,它允许在不修改原有函数或类的情况下,为其动态地添加功能或修改行为。从形式上讲,装饰器是一个接受函数作为参数的可调用对象(通常是一个函数),并返回一个新的函数对象。

装饰器在Python中通过@语法糖来应用,这使得它们的使用非常简洁。装饰器在运行时对函数、方法或类进行包装,可以在不改变其调用方式的情况下增强其功能。

下面是一个简单的装饰器示例,用于记录函数的执行时间:

import time

def timer_decorator(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_decorator
def slow_function(duration):
    time.sleep(duration)
    return "Done sleeping"

# 调用函数
slow_function(1)

在这个例子中,timer_decorator是一个装饰器函数,它接受一个函数func作为参数,并定义了一个内部函数wrapperwrapper函数在被调用时会记录开始时间,调用原始函数func,记录结束时间,并打印出函数执行所花费的时间。最后,wrapper返回原始函数的结果。timer_decorator返回wrapper函数,从而替代了原始函数的行为。

通过@timer_decorator语法,我们将slow_function函数装饰为具有计时功能的版本。当我们调用slow_function时,实际上是在调用wrapper函数,它会执行计时并调用原始的slow_function

发表评论

后才能评论