回到首页

使用装饰器计算程序的运行时间

示例程序

import functools
import time

def get_func_params(func, *args, **kwargs):
    dict_param = {}
    if len(args) > 0:
        var_names = func.__code__.co_varnames
        if len(args) == len(var_names):
            for i in range(len(var_names)):
                dict_param.update({var_names[i]: args[i]})

    if len(kwargs) > 0:
        dict_param.update(kwargs.items())

    return dict_param
   
def with_method_logging(func):
	@functools.wraps(func)
	def wrapper(*args, **kwargs):
	   t_begin = time.time()
	   print('%s method start at %0.4f' % (func.__name__, t_begin))
	   print('LOG: Running method "%s"' % func.__name__)
	   func_params = get_func_params(func, *args, **kwargs)
	   print(func.__name__ + "params dict:======>" + str(func_params))
	   result = func(*args, **kwargs)
	   print('LOG: Method "%s" completed' % func.__name__)
	   print('LOG: Method "%s" result = %s' % (func.__name__, str(result)))
	   t_end = time.time()
	   print('%s method end at %0.4f' % (func.__name__, t_end))
	   print('%s method executed in %s ms' % (func.__name__, t_end - t_begin))
	   return result

	return wrapper

@with_method_logging
def sum(a, b, c):
    print(a + b + c)
    return a + b + c

if __name__ == '__main__':
	sum(1,2,3)

参考链接:python利用装饰器获取函数参数和函数返回值

本文创建于2022.11.22/21.3,修改于2022.11.22/21.3