在代码开发过程中,需要记录方法的执行时间,每个方法都硬代码也可以实现,但是不是最好的方式,考虑到设计模式和模版代码,通过装饰模式实现方法运行计时
在Python中,装饰器可以接受参数,这样可以使装饰器更加灵活,能够根据不同的参数来调整其行为。要给timer
装饰器增加特定参数,可以采用多层嵌套函数的方式来实现。下面是一个示例,展示如何给timer
装饰器增加一个参数,例如单位(秒或毫秒):
import time
def timer(unit="seconds"):
"""
A decorator factory that creates a timer decorator with a specified unit.
"""
def decorator(func):
"""
The actual timer decorator that wraps the function.
"""
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
elapsed_time = (end_time - start_time) * (1000 if unit == "milliseconds" else 1)
print(f"{func.__name__} executed in {elapsed_time:.4f} {unit}")
return result
return wrapper
return decorator
# 使用装饰器,指定单位为毫秒
@timer(unit="milliseconds")
def my_function(n):
# 假设这是一个耗时的操作
time.sleep(n)
# 调用函数
my_function(2)
在这个例子中,timer
装饰器工厂接受一个参数unit
,它决定计时单位是秒还是毫秒。decorator
函数是真正的装饰器,它接受待装饰的函数func
作为参数,并返回一个包装后的函数wrapper
。wrapper
函数计算函数的执行时间,并根据unit
参数将其转换为毫秒或保持为秒。
要使用带有特定参数的装饰器,你只需在@decorator
语法前面加上参数即可,如@timer(unit="milliseconds")
。
这种方式使得timer
装饰器可以根据不同的需求进行定制,比如计时单位的选择,甚至可以进一步扩展,加入更多的参数,如是否输出日志、日志级别等,从而满足更复杂的应用场景。
根据自己的需要选择合适的实现方式,利用设计模式减少模版代码和代码的重复率