Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么包装装饰器显示额外的逗号?_Python_Wrapper - Fatal编程技术网

Python 为什么包装装饰器显示额外的逗号?

Python 为什么包装装饰器显示额外的逗号?,python,wrapper,Python,Wrapper,我想打印函数调用的参数和返回值。我们知道decorator能够在每次调用它包装的函数之前和之后运行额外的代码 from functools import wraps def trace(func): @wraps(func) def wrapper(*args): result = func(*args) print(f'{func.__name__}{args!r}' f'->{result!r}') return resu

我想打印函数调用的参数和返回值。我们知道decorator能够在每次调用它包装的函数之前和之后运行额外的代码

from functools import wraps
def trace(func):
    @wraps(func)
    def wrapper(*args):
        result = func(*args)
        print(f'{func.__name__}{args!r}' f'->{result!r}')
        return result
    return wrapper

@trace
def fibo(n):
    if n in (0, 1):
        return n
    return fibo(n-2)+fibo(n-1)


fib = trace(fibo)
fib(3)
输出

fibo(1,)->1
fibo(0,)->0
fibo(1,)->1
fibo(2,)->1
fibo(3,)->2
fibo(3,)->2

您已经看到,我在包装器函数中只传递了一个
args
值。我的问题是为什么它在输出函数中显示了一个额外的逗号,以及如何修复它?

args
是一个元组,在您的例子中它是一个1元组,至于“修复”它,请确保只传递一个参数并将其作为
args
而不是
*args

from functools import wraps
def trace(func):
    @wraps(func)
    def wrapper(args):
        result = func(args)
        print(f'{func.__name__}({args!r})' f'->{result!r}')
        return result
    return wrapper
对于
fib(3)

fibo(1)->1
fibo(0)->0
fibo(1)->1
fibo(2)->1
fibo(3)->2
fibo(3)->2

@toRex如果这个答案有用,您可以将其标记为已接受,如果您需要更多详细信息,请告诉我