Определение лямбда-функции из словаря в python - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь определить лямбда-функцию с более чем одним атрибутом, атрибуты являются sympy символами и находятся в словаре следующим образом

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

Мне нужно определить лямбда-функцию для выполнения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 голосов
/ 06 июня 2018

eval уже делает то, что вы хотите:

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

Если ваш проект действительно требует переноса 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])
...