如何使装饰器正常工作?

时间:2019-04-29 12:29:44

标签: 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'

能帮我吗?

1 个答案:

答案 0 :(得分:0)

装饰器的工作方式不同。装饰器将您的功能替换为另一种。因此,装饰器应返回一个新函数。这个:

@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))