上栗子
import time, functools
from inspect import isfunction
def run_time(param):
text = None
# run_time 无参数时调用
def decorator_text(param):
return decorator(param)
# 用wrapper保存执行 func(*args, **kwargs)
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print('Starting call {}'.format(wrapper.__name__))
start = time.time()
func(*args, **kwargs)
end = time.time()
print('Ending call {}'.format(wrapper.__name__))
return 'Run_time param is {2}\nExecute {0} used {1}'.format(wrapper.__name__, end - start, text)
return wrapper
# 参数识别
if isfunction(param):
return decorator(param)
else:
text = param
return decorator_text
发现一点问题,在返回下一步操作时
如果不是直接调用函数而是返回函数变量(wrapper操作?),将会保存当前参数,
并在接下来需要新参数时自动接收下一级参数,不会与当前参数混淆。
大概这就是wrapper的威力吧。