同情,如何将函数表达式转换为运算符重载表达式?

时间:2016-07-25 12:01:13

标签: python expression sympy prefix infix-notation

最近我正在使用布尔网络,我正在使用sympy来操作布尔函数。我认为这可能是一个非常基本的问题,但我找不到任何线索。

以下线路效果很好。

>>>from sympy import *
>>>x,y = symbols("x y")
>>>(x | y) & x
And(Or(x, y), x)

这里我有一个非常简单的问题。如何表达'和(或(x,y),x)'可表示为'(x | y)& X&#39 ;?

由于

2 个答案:

答案 0 :(得分:0)

Sympy广泛使用Python运算符重载功能。 在Python中,每个类都可以通过定义具有特殊名称的方法来定义任何数学运算符生效 - 这些方法总是以__作为前缀和后缀,并在Python Data Model中进行了描述。

Sympy符号和表达式是重新定义所有与运算符相关的方法的对象,以执行返回Sympy表达式对象而不是数字结果的操作。

因此,bynary和& dbinary或|的运算符只是Sympy所做的一部分,而长英语版AndOr函数调用也提供了在某些情况下易于键入和可读性。

答案 1 :(得分:0)

如果您只想要更好的打印,可以运行

init_printing()

它将使用Unicode字符打印它,甚至可以使用LaTeX(如Jupyter笔记本中所示)

In [1]: (x | y) & x
Out[1]: x ∧ (x ∨ y)

您也可以使用pprint()功能直接获取此功能。

看起来默认的SymPy打印机使用AndOr代替&|符号来打印逻辑表达式,所以如果您明确需要那些,那么需要继承sympy.printing.str.StrPrinter并覆盖_print_And_print_Or(请参阅current implementation以了解这将如何工作)。