带参数的Python装饰器中的最大代码重用

我设法编写了一个带有参数的装饰器,但是我对两个实际的装饰器具有相同的代码行感到困扰:

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
上一篇:Python和set函数中的属性装饰器


下一篇:python-为什么无法使用“ from module import *”从模块导入此装饰器?