有谁能告诉我如何将参数传递给装饰器调用函数?
def doubleIt(Onefunc):
def doubleIn():
return Onefunc()*Onefunc()
return doubleIn
@doubleIt
def Onefunc():
return 5
print(Onefunc()) # it prints out 25.
但是当我尝试将Onefunc()
升级为:
@doubleIt
def Onefunc(x):
return x
我面临以下错误:
TypeError
Traceback (most recent call last)
<ipython-input-17-6e2b55c94c06> in <module>()
9
10
---> 11 print(Onefunc(5))
12
TypeError: doubleIn() takes 0 positional arguments but 1 was given
错误是不言自明的,但我不确定如何更新doubleIn()
函数来处理它。
答案 0 :(得分:5)
您需要传递可选的位置和关键字参数。
from functools import wraps
def doubleIt(Onefunc):
@wraps(Onefunc)
def doubleIn(*args, **kwargs):
return Onefunc(*args, **kwargs) * Onefunc(*args, **kwargs)
return doubleIn
@doubleIt
def Onefunc(x):
return x
print(Onefunc(5))
答案 1 :(得分:3)
如果在doubleIn()
中设置参数,您还应该在Onefunc()
函数中传递参数:
def doubleIt(Onefunc):
def doubleIn(x):
return Onefunc(x)*Onefunc(x)
return doubleIn
@doubleIt
def Onefunc(x):
return x
print(Onefunc(5))