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

use*_*956 3 python decorator

我有这个函数和一个装饰器 @decorator(integer)

def spam():
    return "ABCD EFG"

def decorator(number):
    def inside(function):
        *do something*
        return *somthing of type string*
    return inside
Run Code Online (Sandbox Code Playgroud)

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

@decorator(3)
def spam():
    return "ABCD EFG"
Run Code Online (Sandbox Code Playgroud)

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

Udy*_*Udy 5

为了定义一个装饰器:

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
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

@decorator(3)
def spam():
    return "ABCD EFG"
Run Code Online (Sandbox Code Playgroud)