python decorator打印返回值

python decorator to print return values

这个问题与Python3有关。有没有一种方法可以让装饰器将返回值打印到任何函数?这个问题修饰器打印函数调用的详细信息-参数名和有效值将打印您传递给函数的所有值。有没有一种方法可以让一个decorator打印函数返回的值,而不管它返回的是单个值还是多个值?

如果你要运行这个:

1
multiply(subtract(add(1,2),add(3,4)),9)

所有的函数都用@superecho修饰,它将记录:

1
2
3
4
5
6
7
8
function call add() 1,2
function add() returns 3
function call add() 3,4
function add() returns 7
function call subtract() 3 7
function subtract() returns -4
function call multiply() -4 9
function multiply() returns -36


1
2
3
4
5
6
7
8
9
10
def monitor_results(func):
    def print(*args):
        customprinter.print(*args)
    def wrapper(*func_args, **func_kwargs):
        print('function call ' + func.__name__ + '()')
        retval = func(*func_args,**func_kwargs)
        print('function ' + func.__name__ + '() returns ' + repr(retval))
        return retval
    wrapper.__name__ = func.__name__
    return wrapper


这个适合你的需要吗?

1
2
3
4
def describeFuncRet(func):
    def wrapper(*func_args, **func_kwargs):
        print(func(*func_args,**func_kwargs))
    return wrapper