python函数形参,在python中传递一个公式作为函数参数

I want to pass a formula within a function parameter in Python where the formula is a combination of the other function parameters. In principle this would look like this:

myfunction(x=2,y=2,z=1,formula="x+2*y/z")

6

or more generaly:

def myformula(x,y,z,formula):

return formula(x,y,z)

This would allow the user to choose any arithmetic expression in terms of x, y, and z without having to create a new function.

One of the possibility I foresee is to convert the string in line of code within the function. Anything possible like that in Python? Or any other ideas?

Thanks

解决方案

Using sympy, you could evaluate mathematical expressions:

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

But note that sympy.sympify does use eval which makes it unsafe to apply to arbitrary user input

since strings can be composed to trick eval into executing arbitrary Python code.

A safer alternative is to build a parser to parse a strictly limited mathematical expressions.

Here are a few examples

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值