Вы можете переписать уравнения для использования словаря
def func(d, x):
return d['p0']*x+d['p1']**2+d['p3']+1
Или вы можете использовать eval
, используя dict в качестве пространства имен
def p_func_eval(data, x):
return eval('p0*x+p1**2+p3+1', None, data)
data = {'p0': -1.0, 'p1': -9.73133548174993, 'p2': 0.0306594941614714, 'p3': 2.0, 'p4': 0.514879452523938}
print(func(data, 33))
Второй метод требует повторного анализа string каждый раз, поэтому может быть немного медленнее, чем первый. Вы можете предварительно скомпилировать выражения или кэшировать их как go. Это немного сложнее и имеет значение, только если вы делаете это много.
_p_func_cache = {}
def p_fun_eval(expression, data, x):
if expression not in _p_func_cache:
_p_func_cache[expression] = compile(expression, 'p_func', 'eval')
return eval(_p_func_cache[expression], None, data)