1、使用parser库
下面方法针对Python 2.6以上版本,Python 2.6以前版本可用compiler库。如下代码段,配合使用parser库和eval函数可实现对任意公式的解析。其中,公式中用到的函数在解析前定义即可。
import parser
code = parser.expr("x*2").compile()
x = 10
print(eval(code))
使用时,可将以上过程封装成一个函数来调用,如下代码段。gen_fuc接收公式输入返回一个函数用于调用,方便后续多次使用同一公式。
import parser
from math import sin
def gen_fuc (code_str):
def func (input_num):
code = parser.expr(code_str).compile()
x = input_num
return eval(code)
return func
if __name__ == "__main__":
formula = "sin(x)*x**2"
r = gen_fuc (formula)
print(r(10))
使用eval解析公式的方式比较方便,但需注意一点:eval作为用户输入,使用起来会比较危险,解决方式详见参考资料2。
2、使用第三方库
可使用ast.parse、pyparsing库来进行公式转换。
参考资料
[1] Equation parsing in Python - Stack Overflow
[2] Safe way to parse user-supplied mathematical formula in Python - Stack Overflow