在 Python 中创建一个装饰器,它会记住函数的最后一个输出

Create a decorator in Python, which remembers last output of the function

我需要创建一个装饰器来记住它所装饰的函数的最后调用结果。比如我有一个函数:

def summarize(*args):
    result = ""
    for i in args:
        result += i
    print('New result = ', result)
    return result

而且我需要使用装饰器(没有任何 类 或 smth),让它变成这样:

summarize("he", "llo")
>>> "Previous result = 'None'"
>>> "New result = 'hello'"
summarize("good", "bye")
>>> "Previous result = 'hello'"
>>> "New result = 'goodbye'"

我是装饰者的新手,现在我不知道如何让它成为那样。只有当我尝试在一个 运行.

中调用该函数两次时,我才得到所需的结果

见下文:

def historic_results(func):
    # retrive historic outputs from hitoric_outputs.txt file if it exists
    with open('historic_outputs.txt', "r") as f:
        try:
           previous_outputs = f.readlines()
        except:
           previous_outputs = []

    def inner(*args, **kwargs):
        
        if not previous_outputs : print("Previous Result:", None)
        if previous_outputs: 
            for item in previous_outputs: print("Previous Result:", item)

        # append the output in the historic outputs txt file
        with open('historic_outputs.txt', 'a') as f:
            f.write(func(*args, **kwargs) + "\n")
        
        print("New Result", func(*args, **kwargs))

        return func(*args, **kwargs)

    return inner


@historic_results
def summarize(*args):
    result = ""
    for i in args:
        result += i
    return result

测试:

summarize("hel", "lo")
summarize("Ami", "ne")
summarize("stupid", "_beaver")

输出:

Previous Result: None
New Result hello

Previous Result: hello
New Result Amine

Previous Result: hello
Previous Result: Amine
New Result stupid_beaver