有没有办法将函数的输出记忆到磁盘?
我有一个功能
def getHtmlOfUrl(url):
... # expensive computation
并想做类似的事情:
def getHtmlMemoized(url) = memoizeToFile(getHtmlOfUrl, "file.dat")
然后调用 getHtmlMemoized(url),以便为每个 url 仅执行一次昂贵的计算。
原文由 seguso 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python 提供了一种非常优雅的方式来做到这一点——装饰器。基本上,装饰器是一个函数,它包装另一个函数以在不更改函数源代码的情况下提供额外的功能。你的装饰器可以这样写:
完成后,使用@-syntax 来“装饰”函数,就可以了。
请注意,此装饰器是有意简化的,可能不适用于所有情况,例如,当源函数接受或返回无法进行 json 序列化的数据时。
有关装饰器的更多信息: How to make a chain of function decorators?
以下是如何让装饰器在退出时只保存缓存一次: