如何实现decorator高阶函数?-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

如何实现decorator高阶函数?

1 有参数的装饰器 --> 高阶函数

创新互联公司是一家专注于成都做网站、网站设计与策划设计,葫芦岛网站建设哪家好?创新互联公司做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:葫芦岛等地区。葫芦岛做网站价格咨询:18982081108

2 执行时间 --> time 库

上代码:

from functools import wraps
import time

# 面向对象写法
class TakeTime:
    def __init__(self, para: int):
        self.para = para

    def __call__(self, func):
        @wraps(func)
        def wrapped(*args, **kwargs):
            start_time = time.time()
            name = func.__name__
            func(*args, **kwargs)
            count_time = time.time() - start_time
            if self.para >= count_time:
                print("the {name} take {time}, less time".format(name=name, time=count_time))
            else:
                print("the {name} take {time}, more time".format(name=name, time=count_time))
            return func
        return wrapped

# 常规写法
def func_time(para: int):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            start_time = time.time()
            name = func.__name__
            func(*args, **kwargs)
            count_time = time.time() - start_time
            if para >= count_time:
                print("the {name} take {time}, less time".format(name=name, time=count_time))
            else:
                print("the {name} take {time}, more time".format(name=name, time=count_time))
            return func
        return wrapper
    return decorator

@TakeTime(10)
def log():
    for x in range(10):
        time.sleep(0.5)

@func_time(10)
def log1():
    for x in range(10):
        time.sleep(0.5)


本文名称:如何实现decorator高阶函数?
分享地址:http://kswsj.cn/article/jeddoc.html

其他资讯