在 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
我需要创建一个装饰器来记住它所装饰的函数的最后调用结果。比如我有一个函数:
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