最近我使用布爾網絡,我使用sympy來操作布爾函數。我認爲這可能是非常基本的問題,但我找不到任何線索。在sympy中,如何將函數表達式轉換爲運算符重載表達式?
以下線路運行良好。
>>>from sympy import *
>>>x,y = symbols("x y")
>>>(x | y) & x
And(Or(x, y), x)
這裏我有一個很簡單的問題。 'And(Or(x,y),x)'如何表示爲'(x | y)& x'?
謝謝
最近我使用布爾網絡,我使用sympy來操作布爾函數。我認爲這可能是非常基本的問題,但我找不到任何線索。在sympy中,如何將函數表達式轉換爲運算符重載表達式?
以下線路運行良好。
>>>from sympy import *
>>>x,y = symbols("x y")
>>>(x | y) & x
And(Or(x, y), x)
這裏我有一個很簡單的問題。 'And(Or(x,y),x)'如何表示爲'(x | y)& x'?
謝謝
Sympy廣泛使用Python操作符重載功能。 在Python中,每個類都可以定義爲任何數學運算符將生效,通過定義具有特殊名稱的方法 - 這些方法總是以__
作爲前綴和後綴,並且在Python Data Model中進行了描述。
Sympy符號和表達式是重新定義所有與運算符相關的方法以執行返回Sympy表達式對象而不是數字結果的操作的對象。
因此,bynary和&
的dbinary或|
運營商只是一個什麼Sympy做一部分,長英文版本提供And
和Or
函數調用,以及便於在某些情況下打字和可讀性。
如果你只是想更好的打印,可以運行
init_printing()
,它將它使用Unicode字符,甚至LaTeX的,如果它是可用的(像Jupyter筆記本)
In [1]: (x | y) & x
Out[1]: x ∧ (x ∨ y)
打印你也可以使用pprint()
函數來直接獲取它。
它看起來像默認SymPy打印機使用And
和Or
代替&
和|
符號打印邏輯表達式,因此,如果要明確這些,你就需要繼承sympy.printing.str.StrPrinter
和覆蓋_print_And
和_print_Or
(見current implementation到了解這將如何工作)。
我已經打開了一個問題來更改SymPy中的默認打印https://github.com/sympy/sympy/issues/11435 – asmeurer
我發現它是針對我的問題的一個很好的解決方案。謝謝你的提示。 –
感謝您的詳細回覆。有沒有簡單的函數將字符串變量'And(Or(x,y),x)'轉換爲字符串變量'(x | y)&x'?如果解決方案不簡單,那麼你能否提供一些提示? –