【发布时间】:2016-06-06 13:19:15
【问题描述】:
我有一个功能 -
def add(a, b):
return a+b
现在我希望它使用装饰器将 100 添加到结果中 -
@decorator(100)
def add(a, b):
return (a+b)
class decorator():
def __init__(self, c):
self.c = c
def __call__(self, f):
def _wrapped_f(a, b):
return self.c + f(a, b)
return _wrapped_f
问题是当我想保留额外的参数变量而不是固定为 100。
有点像 -
@decorator(c)
def add(a, b):
return (a+b)
我可以在函数调用期间以某种方式分配这个变量的值吗? (当调用 add 函数时) 我想使用装饰器执行此操作的原因是因为我不想修改我的函数添加。
我无法在函数中提供额外的参数,例如 -
def(a, b, c=0):
return (a+b+c)
因此,需要装饰者。
【问题讨论】:
-
也就是说,你想让装饰器给函数添加额外的参数?
-
是的,完全正确。如果不是通过装饰器,还有其他方法可以在不修改实际功能的情况下做到这一点。
-
好吧,您可以更改
_wrapped_f以采用 (*args, **kwargs)` 参数,然后将所有这些参数相加,但我真的不明白您将如何定义如何在一般情况下处理这些附加参数。当然,仅仅添加更多的东西来添加到结果中并不总是有意义的。 -
“我无法在函数中提供额外的参数...” 我认为您需要详细说明这一点。为什么不能使用额外的参数?了解这一限制似乎是找到不同解决方案的关键。
标签: python function python-decorators