如何在python中使用装饰器更改函数返回值?

时间:2014-04-03 09:35:24

标签: python decorator

我有这个功能和装饰器@decorator(整数)

def spam():
    return "ABCD EFG"

def decorator(number):
    def inside(function):
        *do something*
        return *somthing of type string*
    return inside

我想让装饰器返回FUNCTION,接受整数并用随后在number个地方的字母替换每个字母。例如

@decorator(3)
def spam():
    return "ABCD EFG"

>>> print(spam())
"DEFG HIJ"
  • 如何让装饰器返回一个函数而不是一个字符串?

2 个答案:

答案 0 :(得分:4)

为了定义装饰器:

def decorator(number):
    def inner(f):
        def decorator_f(*args, **kwargs):
            result = f(*args, **kwargs)
            #make some manipulation on result
            return result
        return decorator_f
    return inner

然后你就可以使用它:

@decorator(3)
def spam():
    return "ABCD EFG"

答案 1 :(得分:0)

为什么不使用常规方法:

def spam(number):
    s = "ABCD EFG"
    return ''.join(chr(ord(x)+number) if x.isalpha() else x for x in s)

如果你必须使用装饰器,请在@Udy显示时实现它们,上面提供的行是你如何返回移位值。