练习+小结
Topic sourceimport time
def log(argv=None): def decorator(func): def wrapper(args, **kwargs): start = time.time() 1000 ret = func(args, **kwargs) end = time.time() 1000 if isinstance(argv, str): print('%s take %d ms' % (argv, end - start)) else: print('take %d ms' % (end - start)) return ret
return wrapper
if isinstance(argv, str):
return decorator
else:
return decorator(argv)
@log def test(argv): time.sleep(argv)
if name == 'main': test(1)
- 1
烈可烈
这里请注意理解
wrapper
里的fn(*args, **kwargs)
,你不return
它的值,则等于最后是得不到fn(*args, **kwargs)
方法的返回值的(除非它并不返回东西,那才没影响)。测试:
建议:最好多自己玩几遍这种
log()(f)()
的调试,就能比较清晰的感受到这个装饰器里里外外到底返回了什么