Equation parsing in Python
How can I (easily) take a string such as "sin(x)*x^2"
which might be entered by a user at runtime and produce a Python function that could be evaluated for any value of x
?
Solution 1:
Python's own internal compiler can parse this, if you use Python notation.
If your change the notation slightly, you'll be happier.
import compiler
eq= "sin(x)*x**2"
ast= compiler.parse( eq )
You get an abstract syntax tree that you can work with.
Solution 2:
You can use Python parser
:
import parser
from math import sin
formula = "sin(x)*x**2"
code = parser.expr(formula).compile()
x = 10
print(eval(code))
It performs better than pure eval
and, of course, avoids code injection!