在Python中评估数学表达式
我想把一个数学表达式分解成一个解析树,像这样:
((3 + 4 - 1) * 5 + 6 * -7) / 2
'/'
/ \
+ 2
/ \
* *
/ \ / \
- 5 6 -7
/ \
+ 1
/ \
3 4
有没有什么纯Python的方法可以做到这一点?比如把表达式作为字符串传给Python,然后得到上面提到的那种树形结构。
谢谢。
5 个回答
10
是的,Python 的 ast
模块可以帮助你实现这个功能。你需要查一下你所用的 Python 版本对应的具体接口,因为 ast
模块似乎会经常更新。
特别是,ast.parse()
方法对你的应用会很有帮助:
>>> import ast
>>> ast.parse("(1+2)*3", "", "eval")
<_ast.Expression object at 0x88950>
>>> ast.dump(_)
'Expression(body=BinOp(left=BinOp(left=Num(n=1), op=Add(), right=Num(n=2)), op=Mult(), right=Num(n=3)))'