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。