将字符串计算为值

时间:2013-02-03 02:01:24

标签: python string

Python中是否可以计算字符串中的术语? 例如:

string_a = "4 ** (3 - 2)"

unknown_function(string_a) = 4

这可能吗?在我的例子中是否有模仿“unknown_function”的函数?

4 个答案:

答案 0 :(得分:11)

就像sympylast 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)

是的,您可以使用eval功能。

>>> string_a = "4 ** (3 - 2)"
>>> eval(string_a)
4
>>> 

您可以在documentation

中阅读更多内容

答案 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/