python 方法运行计时装饰模式实现

在代码开发过程中,需要记录方法的执行时间,每个方法都硬代码也可以实现,但是不是最好的方式,考虑到设计模式和模版代码,通过装饰模式实现方法运行计时

在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作为参数,并返回一个包装后的函数wrapperwrapper函数计算函数的执行时间,并根据unit参数将其转换为毫秒或保持为秒。

要使用带有特定参数的装饰器,你只需在@decorator语法前面加上参数即可,如@timer(unit="milliseconds")

这种方式使得timer装饰器可以根据不同的需求进行定制,比如计时单位的选择,甚至可以进一步扩展,加入更多的参数,如是否输出日志日志级别等,从而满足更复杂的应用场景。

根据自己的需要选择合适的实现方式,利用设计模式减少模版代码和代码的重复率

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值