我想在 Python 中的函数参数内传递公式,其中公式是其他函数参数的组合。原则上这看起来像这样:
myfunction(x=2,y=2,z=1,formula="x+2*y/z")
6
或更一般地说:
def myformula(x,y,z,formula):
return formula(x,y,z)
这将允许用户根据 x、y 和 z 选择任何算术表达式,而无需创建新函数。
我预见到的一种可能性是在函数内的代码行中转换字符串。在 Python 中有什么可能吗?或者有什么其他的想法吗? 谢谢
最佳答案
使用 sympy ,您可以评估数学表达式:
import sympy as sy
def myformula(formula, **kwargs):
expr = sy.sympify(formula)
return expr.evalf(subs=kwargs)
print(myformula(x=2,y=2,z=1,formula="x+2*y/z"))
# 6.00000000000000
print(myformula(x=2,y=2,z=1,formula="sin(x+y-z)"))
# 0.141120008059867
但请注意 sympy.sympify
确实使用了 eval
这使得应用于任意用户输入是不安全的
因为字符串可以组成 trick eval
into executing arbitrary Python code .
一个更安全的替代方案是构建一个解析器来解析严格限制的数学表达式。 这里有几个例子
关于python - 在python中将公式作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23687219/