我在这个装饰器代码中犯了什么错误?

10 浏览
0 Comments

我在这个装饰器代码中犯了什么错误?

我试图理解Python中修饰符的概念,特别是当我们有不同参数时(事实上我不确定如何将参数传递给修饰符)。我编写了下面这段简短而简单的代码,但我无法运行它:

def advance(*arg, function):
    result = a * function(b, c)
    print(result)
@advance
def Sum1(b, c):
    return b + c
print(Sum1(1, 2, 3))

运行代码时,我收到的错误消息是:TypeError: advance() missing 1 required keyword-only argument: \'function\'.

admin 更改状态以发布 2023年5月24日
0
0 Comments

\n\n装饰器必须返回一个新的函数,所以您希望有类似于:

def advance(function):
    def wrapped(a, b, c):
        return a * function(b, c)
    return wrapped
@advance
def Sum1(b, c):
    return b + c
print(Sum1(10, 2, 3))

这样的东西:

0