Python 我该怎么做才能让装饰师工作呢?

Python 我该怎么做才能让装饰师工作呢?,python,python-3.x,Python,Python 3.x,您好,我有此代码,但它不起作用: def by2(c): return c*2 @by2 def add(a,b): return a+b print(add(2,5)) 当我尝试执行它时,我得到: TypeError: unsupported operand type(s) for *: 'function' and 'int' 你能帮帮我吗?装饰师的工作方式不同。装饰器用另一个函数替换您的函数。所以decorator应该返回一个新函数。这: @by2 def add(

您好,我有此代码,但它不起作用:

def by2(c):
    return c*2

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

print(add(2,5))
当我尝试执行它时,我得到:

TypeError: unsupported operand type(s) for *: 'function' and 'int'

你能帮帮我吗?

装饰师的工作方式不同。装饰器用另一个函数替换您的函数。所以decorator应该返回一个新函数。这:

@by2
def add(a, b):
    return a + b
与此相同:

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

add = by2(add)
因此,您需要的是:

def by2(func):
    def wrapper(*args):
        return func(*args) * 2 
    return wrapper

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

print(add(2, 5))

你读过关于装饰者的教程吗?你希望这个装饰者做什么?是的,我知道当我输入add2,5时,我应该得到adda,b=by2adda,b,所以应该是14。