V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Lucups
V2EX  ›  Python

如何把 python 字符串转换成可直接运行的公式?

  •  
  •   Lucups · 2014-05-14 02:46:45 +08:00 · 3746 次点击
    这是一个创建于 3853 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如,输入一个字符串 'sin(x) + 0.6x - 0.3x^2'

    如何转换换成可运行的 python 代码?
    或者说有没有可以直接运算这种式子的库(给定 x 的值)?

    (其实最关键的是能识别 ^ sin cos 这些手写的运算符)

    我尝试自己写了,发现情况还是比较复杂的,担心考虑不够周到,找了半天貌似没有合适的库可用。
    求推荐。
    Thx!
    9 条回复    2014-05-17 23:42:51 +08:00
    stevenyou
        1
    stevenyou  
       2014-05-14 08:55:00 +08:00 via iPhone   ❤️ 1
    https://github.com/pydata/numexpr/blob/master/README.rst

    虽然这个是做并行计算的 但是evaluate() 这个方法可以完成你的要求
    cbsw
        2
    cbsw  
       2014-05-14 09:59:30 +08:00   ❤️ 1
    s = 'sin(x) + 0.6 * x - 0.3 * x **2'
    f = lambda x,s: eval(s)
    f(pi/4, s)
    只能对 python 合法的式子求值
    ChiChou
        3
    ChiChou  
       2014-05-14 10:13:22 +08:00   ❤️ 1
    @cbsw 别用 eval 做在线的功能,小心远程代码执行~
    cbsw
        4
    cbsw  
       2014-05-14 10:16:32 +08:00   ❤️ 1
    @ChiChou 是的,这的确很不安全,不过如果仅仅是自己用的话可以算作一种解决方案
    Lucups
        5
    Lucups  
    OP
       2014-05-14 11:02:01 +08:00
    @stevenyou
    @cbsw
    @ChiChou
    正在按照各位意见尝试。感谢已发送,不小心给
    @cbsw
    送了两个感谢,请回送一个,哈哈 : )
    Lucups
        6
    Lucups  
    OP
       2014-05-14 13:58:06 +08:00   ❤️ 1
    @stevenyou 虽然还是有几个字符需要过滤,不过总体来说没有问题,很满意,非常感谢!~
    tonic
        7
    tonic  
       2014-05-14 21:11:19 +08:00
    ...自己写个计算器啊, 我记得大学数据结构讲栈的时候都会讲前中后缀表达式吧, 都会要写个计算机的...
    Lucups
        8
    Lucups  
    OP
       2014-05-16 10:08:40 +08:00
    @tonic 写一个要考虑的因素太多,另外就是安全性问题,所以不敢轻易下手,用开源的东西比较好一点。等这个项目告一段落就开始重复造轮子~
    ericls
        9
    ericls  
       2014-05-17 23:42:51 +08:00
    python
    是有符号运算库的
    类似matlab的符号运算
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:08 · PVG 15:08 · LAX 23:08 · JFK 02:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.