4

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

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

unknown_function(string_a) = 4

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

4

4 回答 4

13

eval

eval(string_a)
# 4

但是,如果来自除您以外的任何人,请不要在任何情况下使用它,因为他们很容易侵入您的系统并破坏您的文件!string_a

于 2013-02-03T02:04:56.787 回答
12

就像您上一个问题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

我在这里编写了一个将字符串表达式转换为函数的方法,这有点可爱。

于 2013-02-03T02:29:06.643 回答
3

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

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

您可以在文档中阅读更多内容

于 2013-02-03T02:02:54.930 回答
1

有一个模块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/

于 2019-03-31T12:39:55.953 回答