我想在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
它,因此将其应用于任意用户输入是不安全的,因为可以组合字符串来欺骗eval
执行任意Python代码。
一种更安全的选择是构建一个解析器来解析严格受限的数学表达式。这里有一些例子
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句