如何实现decorator高阶函数?
1 有参数的装饰器 --> 高阶函数
2 执行时间 --> time 库
上代码:
from functools import wrapsimport 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)
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。