Fra*_*ank 5 python django python-3.x
我正在创建一个小助手工具。它是一个计时器装饰器(不是很特别),用于测量任何方法的执行时间。
它在控制台上打印计算出的执行时间以及有用的信息。
def timer(func):
"""@timer decorator"""
from functools import wraps
from time import time
def concat_args(*args, **kwargs):
for arg in args:
yield str(arg)
for key, value in kwargs.items():
yield str(key) + '=' + str(value)
@wraps(func) # sets return meta to func meta
def wrapper(*args, **kwargs):
start = time()
ret = func(*args, **kwargs)
dur = format((time() - start) * 1000, ".2f")
print('{}{}({}) -> {}ms.'.format(
func.__module__ + '.' if func.__module__ else '',
func.__name__,
', '.join(concat_args(*args, **kwargs)),
dur
))
return ret
return wrapper
Run Code Online (Sandbox Code Playgroud)
这给了我模型名和函数名:
user.models.get_matches(demo) -> 24.09ms.
Run Code Online (Sandbox Code Playgroud)
我也想在输出中包含类名:
user.models.User.get_matches(demo) -> 24.09ms.
Run Code Online (Sandbox Code Playgroud)
如何从包装器内部获取函数('func')的类名?
编辑:非常感谢李浩。这是完成的版本:
user.models.get_matches(demo) -> 24.09ms.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |