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])