简述对装饰器的理解,并写出一个计时器记录方法执行性能的装饰器? ?
装饰器(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
作为参数,并定义了一个内部函数wrapper
。wrapper
函数在被调用时会记录开始时间,调用原始函数func
,记录结束时间,并打印出函数执行所花费的时间。最后,wrapper
返回原始函数的结果。timer_decorator
返回wrapper
函数,从而替代了原始函数的行为。
通过@timer_decorator
语法,我们将slow_function
函数装饰为具有计时功能的版本。当我们调用slow_function
时,实际上是在调用wrapper
函数,它会执行计时并调用原始的slow_function
。