【发布时间】:2018-01-28 15:29:23
【问题描述】:
我尝试使用函数装饰器,但在这个例子中它对我不起作用,你能给我解决方案吗?
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 个”
【问题讨论】:
-
说的是实话。你的
decorator函数不接受任何参数,当你调用add(1,2)时,你最终会调用decorator(1,2),因为这是你从multiply_by_three方法返回的。另外,请考虑不要将其称为“装饰器”,因为这样讨论起来会非常混乱(因为multiply_by_three是实际的装饰器)。
标签: python python-3.x decorator python-decorators