Python:预计算/缓存部分函数

时间:2017-10-13 10:27:33

标签: python function caching

让我们考虑Python中的以下函数(它只是一个虚拟示例):

from math import factorial

def f(x, param):
    init = factorial(param)
    return x**param / init

此函数在主代码中多次调用,具有不同的x值但具有相同的param值。但是,param的值是任意的,事先不知道。

如何在第一个函数调用中预先计算或缓存init的值,以便不需要在每次函数调用时重新计算它?

3 个答案:

答案 0 :(得分:2)

您可以使用functools中的lru_cache来缓存因子调用的结果。以下示例从math.factorial,

创建factorial的自定义缓存版本
import math
import functools

@functools.lru_cache()
def factorial(n):
    return math.factorial(n)

def f(x, param):
    init = factorial(param)
    return x**param / init

答案 1 :(得分:1)

您只需将param的默认值设置为全局变量即可。然后,当您运行程序并设置param时,只需更改值

return status(422, "your chosen status message");

答案 2 :(得分:1)

您可以使用init和param实现一个类,如下所示:

from math import factorial

class f:
  def __init__(self, param):
    self.init = factorial(param)
    self.param = param

  def __call__(self, x):
    return x**self.param / self.init


a = f(10) # __init__

for i in range(10):
  print(a(i))  # __call__