在Python3中延迟函数调用参数

2024-04-20 06:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用一个固定的字典向一个昂贵的函数添加一个缓存。大概是这样的:

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()失败时调用它


Tags: 函数ingetreturnif字典defarg
2条回答

如果您想要的是清洁度,我建议您使用library,而不是重新发明轮子:

from functools import lru_cache

@lru_cache
def expensive_function(arg):
    # do expensive thing
    pass

现在,对expensive_function的所有调用都被记录下来,您可以调用它,而无需自己处理缓存。(如果您担心内存消耗,甚至可以限制缓存大小。)

为了回答字面上的问题,Python无法像Haskell或Scheme那样创建懒惰地计算其参数的函数或宏。在Python中延迟计算的唯一方法是将其包装在函数或生成器中。它的可读性将比您的原始代码少,而不是多

def func(arg):
    result = precomputed[arg] if arg in precomputed else expensive_function(arg)
    return result

相关问题 更多 >