在python中从字典定义Lambda函数

时间:2018-06-05 20:08:55

标签: python dictionary lambda sympy

我试图定义一个具有多个属性的lambda函数,属性为sympy符号,并且在字典中如下所示

my_dict = {'sym1':sym1 , 'sym2':sym2 , ......}

我需要定义一个lambda函数来执行eval(),如下所示:

fn = lambda expr , **my_dict : eval(expr)

这样当我用数字eval的词典调用它时,可以正确地替换它们如下:

subs_dict={'sym1':1 , 'sym2':5 , ......)
expr = #some text eqn of the syms
x = fn(expr,**subs_dict)
print(x)

然而,当我这样做时,x被打印为符号的功能......为什么??!我该怎么办?

1 个答案:

答案 0 :(得分:0)

eval已经做了你想做的事:

>>> eval("3*x**2 + 4*y", None, dict(x=0, y=-10000000))
-40000000

如果你的项目确实要求在lambda中包装eval

>>> fn = lambda expr, **kwargs : eval(expr, None, kwargs)
>>> fn("3*x+4*y",x=1,y=2)
11

如果您使用sympy,lambdify是一个更强大的替代方案,它带有多个后端:

>>> import sympy as sp
>>> x, y = sp.symbols('x y')
>>> f = sp.lambdify((x, y), 3*x+4*y, modules='numpy')
>>> import numpy as np
>>> f(np.random.randn(10), np.random.randn(10))
array([ 3.86723102,  0.85028042, -1.74461009, -4.02824375, -0.59191871,
       -0.52022366,  5.43335779, -2.09120517, -7.16387162, -0.22421031])