Python中是否可以计算字符串中的术语? 例如:
string_a = "4 ** (3 - 2)"
unknown_function(string_a) = 4
这可能吗?在我的例子中是否有模仿“unknown_function”的函数?
答案 0 :(得分:11)
就像sympy
是last question的有用模块一样,它可以在此处应用:
>>> import sympy
>>> sympy.sympify("4**(3-2)")
4
甚至
>>> sympy.sympify("2*x+y")
2*x + y
>>> sympy.sympify("2*x+y").subs(dict(x=2, y=3))
7
请注意,这将返回sympy
个对象,如果您想从中获取整数或浮点数,则应明确执行转换:
>>> type(sympy.sympify("4**(3-2)"))
<class 'sympy.core.numbers.Integer'>
>>> int(sympy.sympify("4**(3-2)"))
4
我把一个食谱混合在一起,将字符串表达式变成函数here,这很有趣。
答案 1 :(得分:7)
有eval
eval(string_a)
# 4
但是在任何情况下都不要使用如果string_a
来自除了你以外的任何人,因为他们可以easily hack into your system and destroy your files!
答案 2 :(得分:3)
答案 3 :(得分:0)
有一个模块py-expression-eval
,它不依赖于eval的使用。它可以用来将字符串作为数学表达式求值,甚至可以对符号表达式求值。
from py_expression_eval import Parser
parser = Parser()
expr = parser.parse("4 ^ (3 - 2)")
expr.evaluate({})
有关符号表达式的用法,请参见:https://axiacore.com/blog/mathematical-expression-evaluator-python/