python - 在python中将公式作为函数参数传递

标签 python function

我想在 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/

相关文章:

c++ - 具有返回值的函数 (C++)

c++ - 基于模板C++创建转置矩阵函数

javascript - 从函数返回变量

python - 自定义 GAE 任务队列出错

python - python中类方法的重新定义

python - 重新实现 __eq__ 以将集合与 python 中的 symmetry_difference 进行比较

c++ - C++ std::string 中是否有任何函数可以计算两个字符串的相同起始字符总数或任何最佳方法

函数给出奇怪的错误?

python - 选择行值不为空的 pandas 数据框的列名

python - 基于 web2py 构建的成熟 CMS 和博客有哪些?