编程语言
首页 > 编程语言> > Python函数装饰器错误

Python函数装饰器错误

作者:互联网

我试图使用函数装饰器,但在这个例子中它对我不起作用,你能给我解决方案吗?

def multiply_by_three(f):
    def decorator():
        return f() * 3
return decorator

@multiply_by_three
def add(a, b):  
    return a + b

print(add(1,2)) # returns (1 + 2) * 3 = 9

解释器打印错误:“TypeError:decorator()需要0个位置参数但是给出了2个”

解决方法:

当您使用装饰器时,您从装饰器返回的函数将替换旧函数.换句话说,multiply_by_three中的装饰器函数替换了add函数.

这意味着每个函数签名都应该匹配,包括它们的参数.但是,在你的代码中,add需要两个参数,而decorator则不需要.你需要让decorator接收两个参数.您可以使用*args and **kwargs轻松完成此操作:

def multiply_by_three(f):
    def decorator(*args, **kwargs):
        return f(*args, **kwargs) * 3
    return decorator

如果您现在装饰您的功能并运行它,您可以看到它的工作原理:

@multiply_by_three
def add(a, b):  
    return a + b

print(add(1,2)) # 9

标签:python-decorators,python,python-3-x,decorator
来源: https://codeday.me/bug/20190828/1750771.html