我正在尝试使用一个固定的字典向一个昂贵的函数添加一个缓存。大概是这样的:
def func(arg):
if arg in precomputed:
return precomputed[arg]
else:
return expensive_function(arg)
现在,如果我可以使用dict.get()
默认值执行类似的操作,它会更干净一些:
def func(arg):
return precomputed.get(arg, expensive_function(arg))
问题是,expensive_function()
不管precomputed.get()
是否成功,都会运行,因此我们不会因为任何味道而获得所有脂肪
是否有一种方法可以将调用延迟到expensive_function()
以便仅在precomputed_get()
失败时调用它
如果您想要的是清洁度,我建议您使用library,而不是重新发明轮子:
现在,对
expensive_function
的所有调用都被记录下来,您可以调用它,而无需自己处理缓存。(如果您担心内存消耗,甚至可以限制缓存大小。)为了回答字面上的问题,Python无法像Haskell或Scheme那样创建懒惰地计算其参数的函数或宏。在Python中延迟计算的唯一方法是将其包装在函数或生成器中。它的可读性将比您的原始代码少,而不是多
相关问题 更多 >
编程相关推荐