将字符串计算为值

4 投票
4 回答
29041 浏览
提问于 2025-04-17 14:35

在Python中,可以在字符串中计算一个表达式吗?

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

unknown_function(string_a) = 4

这可能吗?有没有什么函数可以模仿我例子中的“unknown_function”?

4 个回答

3

是的,你可以使用 eval 这个函数。

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

你可以在 文档中了解更多信息。

15

就像你之前的问题中提到的,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

我拼凑了一个方法,可以把字符串表达式变成函数,在这里可以看看,挺有意思的。

13

这里提到了一个叫做 eval 的东西。

eval(string_a)
# 4

但是无论如何都不要使用它,如果 string_a 这个内容不是你自己写的,因为别人可以轻易地入侵你的系统,破坏你的文件!

撰写回答