Python/Cython返回Chained函数



我正试图返回一个链接函数

在下面,我想给它一个映射到函数的值列表。例如下面的代码

get_function([0,1,2])

返回函数

fun(x , [a,b,c]) = a*b/x**c = mult(div(pow(x,c),b),a)

到目前为止,我已经接近

def get_function(function_params):
def fun(x,params):
func = x
for i in range(1,len(function_params)):
if function_params[i] == 0:
func = pow(func,params[-i])
elif function_params[i] == 1:
func = div(func,params[-i])
elif function_params[i] == 2:
func = mult(func,params[-i])
return func
return fun

显然,我可以使用这个庞大的if语句列表,但我希望它更快,这样返回函数将大大提高性能。注意:这是一个MRE

好吧,我不明白为什么不能在调用get_function()时列出要应用的函数。你那时已经掌握了所有这些信息。

唯一缺少的是稍后给出的参数值。

from operator import mul
from operator import truediv as div
def get_function(function_params):
funcs = [lambda x,p: pow(x,p),lambda x,p: div(x,p),lambda x,p: mul(x,p)]
funcs = [funcs[i] for i in function_params]
def fun(x, params):
func = x
for f,p in zip(funcs, params):
func = f(func, p)
return func
return fun
f = get_function([2,2])
print(f(5,[3,4]))

输出:

60

由于60 = (5*3)*4

相关内容

  • 没有找到相关文章

最新更新