Python识别公式字符串的方法

1、使用parser库

        下面方法针对Python 2.6以上版本,Python 2.6以前版本可用compiler库。如下代码段,配合使用parser库和eval函数可实现对任意公式的解析。其中,公式中用到的函数在解析前定义即可。

import parser

code = parser.expr("x*2").compile()
x = 10
print(eval(code))

         使用时,可将以上过程封装成一个函数来调用,如下代码段。gen_fuc接收公式输入返回一个函数用于调用,方便后续多次使用同一公式。

import parser
from math import sin

def gen_fuc (code_str):
    def func (input_num):
        code = parser.expr(code_str).compile()
        x = input_num
        return eval(code)
    return func


if __name__ == "__main__":
    formula = "sin(x)*x**2"
    r = gen_fuc (formula)
    print(r(10))

        使用eval解析公式的方式比较方便,但需注意一点:eval作为用户输入,使用起来会比较危险,解决方式详见参考资料2。 

2、使用第三方库

        可使用ast.parse、pyparsing库来进行公式转换。

参考资料

[1] Equation parsing in Python - Stack Overflow

[2] Safe way to parse user-supplied mathematical formula in Python - Stack Overflow

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值