我设法编写了一个带有参数的装饰器,但是我对两个实际的装饰器具有相同的代码行感到困扰:
def wrapper(*args, **kwargs):
r = fn(*args)
并想知道是否有某种方法可以解决这种违反DRY的情况
def fix(double):
def outer(fn):
if double:
def wrapper(*args, **kwargs):
r = fn(*args)
return 2 * r
return wrapper
else:
def wrapper(*args, **kwargs):
r = fn(*args)
return r
return wrapper
return outer
解决方法:
如果double为False,则可以乘以1:
def fix(double):
def outer(fn):
factor = 2 if double else 1
def wrapper(*args, **kwargs):
r = fn(*args)
return factor * r
return wrapper
return outer