Decorator
- python一切皆对象,函数也可以当作参数传递
- 装饰器是接受函数作为参数,添加功能后返回一个新函数的函数(类)
- python中通过@使用装饰器
- 编写一个记录函数/类耗时的装饰器
-
import time # 用函数编写装饰器 def log_time(func): # 接受一个函数作为参数 def _log(*args, **kwargs): begin = time.time() res = func(*args, **kwargs) print(f'use time:{time.time() - begin}') return res return _log # 用类编写装饰器,可以给装饰器增加参数 class logTime: def __cal__(self, func): def _log(*args, **kwargs): begin = time.time() res = func(*args, **kwargs) print(f'use time:{time.time() - begin}') return res return _log class LogTimePrams: def __init__(self, use_int=False): self.user_int = use_int def __call__(self, func): def _log(*args, **kwargs): begin = time.time() res = func(*args, **kwargs) if self.user_int: print(f'use time:{int(time.time() - begin)}') else: print(f'use time:{time.time() - begin}') return res return _log @log_time # 装饰器语法糖 def mysleep(): time.sleep(1) @logTime() def mysleep1(): time.sleep(1) @LogTimePrams(use_int=True) def mysleep2(): time.sleep(1)