У меня есть класс с именем NumApprox, он берет строку в качестве ввода (математическое выражение, содержащее переменную «x»), и все методы в нем просто разные approachs интегрировать математическое выражение дано численное значение «х»Python 3.5 Как я могу избавиться от eval в моей функции класса
ожидаемые примеры ввода:
input = " x ** 2 * log(x) "
input = "1/sqrt(2*pi) * exp(- x **2/2) "
мне было интересно, как я могу выделить и взять под контроль «х» переменной, представленной во входной строке и использовать его из любого места в моем классе без функции eval.
Это то, что я сделал, но мне не нравится эта функция «eval» и дается мое ограниченное знание классов Python ... Я хотел бы знать, есть ли лучшая альтернатива «eval», ?
from math import pi, sqrt, exp, log
class NumApprox:
def __init__(self, expr):
self.expr = expr
def pdf(self, x):
self.x = x
self.ev = eval(self.expr.replace('x', 'self.x'))
return self.ev
def integrate_rect_method(self, A, B, n):
...
Если вы хотите оценить произвольные выражения, не прибегая к 'eval', вам, вероятно, придется начинать смотреть на какой-то парсер. – Iluvatar
лучше использовать модули, такие как [SymPy] (http://www.sympy.org/) – furas
Как вы думаете, что вы думаете, 'self.expr.replace ('x', 'self.x')' будет делать, когда 'expr' -' exp (x) '? – donkopotamus