的Python:的功能
问题描述:
预先计算/缓存部分让我们考虑在Python下面的函数(这只是一个虚拟的例子):的Python:的功能
from math import factorial
def f(x, param):
init = factorial(param)
return x**param/init
这个函数被调用的x
不同的值,但主要的代码中多次具有相同的值param
。但是,param
的值是任意的,并且事先不知道。
如何在第一次函数调用时预先计算或缓存init
的值,以便在每次函数调用时都不需要重新计算它的值?
答
您可以使用从functools的lru_cache缓存阶乘调用的结果。以下示例从math.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
答
您可以将参数的默认值设置为全局变量。然后,当你运行该程序并设置PARAM,只是改变了值
default = 0
def f(x, param=default):
if param==default:
init = default_init
else:
init = factorial(param)
return x**param/init
def main():
global default
default=arbitary_value
global default_init = factorial(default)
答
您可以实现使用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__