python利用装饰器获取函数参数和函数返回值

最近项目需要增加日志可观性,就在想看能不能通过装饰器方式来获取函数的参数和返回值,这样也方便将其写入日志文件,代码如下:

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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值