是否可以在 Python 中计算字符串中的术语?例如:
string_a = "4 ** (3 - 2)"
unknown_function(string_a) = 4
这可能吗?在我的示例中是否有模仿“unknown_function”的函数?
就像您上一个问题sympy
的有用模块一样,它可以在这里应用:
>>> 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
我在这里编写了一个将字符串表达式转换为函数的方法,这有点可爱。
有一个模块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/