Python 3.5如何摆脱我的类函数中的eval

时间:2016-12-06 09:37:18

标签: python class eval init self

我有一个名为NumApprox的类,它接受一个字符串作为输入(一个包含变量' x'的数学表达式),其中的所有方法只是在给定数值的情况下集成数学表达式的不同方法' x'

的价值

预期的输入示例:

  input = " x ** 2 * log( x ) "

  input = "1 / sqrt(2*pi) * exp(- x **2 / 2) "

我想知道如何隔离并控制' x'由字符串输入提供的变量,并在我的班级中的任何地方使用它,而没有“eval”'功能。

这就是我所做过的,但我不喜欢这样做的评价' eval'函数和我对Python类的有限知识......我想知道是否有更好的替代方案。 ?

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): 
        ...

1 个答案:

答案 0 :(得分:2)

也许使用模块SymPy

x**2*log(x)
4*log(2)

sqrt(2)*exp(-x**2/2)/(2*sqrt(pi))
sqrt(2)*exp(-2)/(2*sqrt(pi))

结果:

{{1}}

Parsing

Basic OperationsSympify