一个用于python的方程式解析器/计算器模块。

kharazmi的Python项目详细描述


哈拉兹米

Kharazmi是Khwarizmi(al-Khwarizmi,Algorithmi)的波斯语发音,是python的一个方程式解析器/计算器模块。在

它的主要目的是提供一种简单的方法,从用户那里得到方程,并在自己的数据上运行它们,而无需使用 eval并且可以在不同的数据类型(number、numpy数组等)上使用它

目前它支持:

  • 基本数学运算(+-*/^)
  • 数值变量(int、float、complex)
  • 可插拔函数

安装

只需使用pip安装:

pip install kharazmi

请记住,Kharazmi使用Python type annotations (PEP 484),并且 f-Strings (PEP 498)所以您需要python3.6或更高版本。在

使用

基本用法

Kharazmi提供了一个简单而强大的API。首先你有EquationParser,哈拉兹米的核心。 这是你需要担心的主要类。只需实例化它并将用户的输入传递到其parse方法:

^{pr2}$

所有表达式都是kharazmi.models.BaseExpression类的子类。你可以像使用python一样使用它们 包含整数的变量,例如:

expression1=parser.parse("3*x - y")expression2=parser.parse("z")expression3=expression1/expression2

您甚至可以使用普通python代码构建表达式:

x=parser.parse("x")expression4=2*x+4

BaseExpression类提供一个evaluate方法。它允许您计算给定值的表达式的值 提供变量:

expression5=parser.parse("2*x + 4")expression5.evaluate(x=2)

因为Kharazmi在幕后使用了python数学运算符(+-*/^),所以您可以传递任何支持这些运算符的值 操作并仍然得到正确的结果,例如:可以传递numpy数组:

importnumpyasnpexpression6=parser.parse("2*x + y")x=np.ones((2,2))y=np.identity(2)expression6.evaluate(x=x,y=y)

最后,如果您有一个不知道其变量的表达式,您可以使用variables获得它们的列表 表达式的属性。在

使用函数

如果您想创建更复杂的表达式,比如sin(x)^2 + cos(x)^2,该怎么办。在

首先,您必须告诉kharazmi您的函数列表:

frommathimportsin,cosfromkharazmiimportregister_functionregister_function("sin",sin)register_function("cos",cos)expression7=parser.parse("sin(x)^2 + cos(x)^2")

您甚至可以使用多个输入的函数:

register_function("min",min)expression7=parser.parse("1 + min(x, y)")

如果您想使用python的内置数学函数,可以使用kharazmi.activate_builtin_math。调用此函数 将注册math中的所有内置函数,以及minmaxround和{}。在

fromkharazmiimportactivate_builtin_mathactivate_builtin_math()expression8=parser.parse("log2(8)")

用作模块

您可以使用python -m kharazmikharazmi作为一个模块运行,这将运行一个类似REPL的程序,允许您输入 表达式,看看如何在代码中做同样的事情,换句话说,kharazmi是如何理解输入的,以及 评估一下。在

它也支持所有的数学函数。在

它主要用于调试和测试目的,但是如果您想了解kharazmi是如何工作的,它就在那里, 我建议从那里开始。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
调试如何使用VIM/GVIM调试Java应用程序?   java Tomcat 8+OPenJDK 8 64位内存使用率   算法希尔密码加密/解密源代码Java(2 x 2矩阵密钥)   番石榴中有没有类似于功能性Java的效果?   Java算法:检查字典中是否有字符串   java如何从lambda中获取变量?   获取当前jar文件名的java   java LinkedList:如何将当前节点分配给它后面的节点?删除当前节点时   以与ImageMagick的“identify”命令相同的方式在Java中获取图像质量   java是否可以在运行时使用JAXR创建Web服务?   java在listView中过滤两个字符串   maven管理具有外部资源依赖关系的多个Java模块   java Android通过Thread/Runnable/Handler/Looper方法执行简单的异步任务   java Hibernate返回空对象   java将一个jar打包成一个dist dir,其中包含独立的外部资源和依赖项