如何使得 sympy 中的字符串转换行为像漂亮的打印输出一样?

3
我希望能够在Python中使用str转换函数,使其像Sympy中的漂亮打印函数一样工作(或者像调用任何参数的init_printing()函数一样打印)。目前,如果调用这样的函数,它只会更改向屏幕打印的print函数。我该如何让str表现得像pprint或其他选项一样?简而言之,最好能够以某种方式获取/拦截Python本身中的字符串和变量的打印输出。

例如,我希望能够执行以下操作:

from sympy import *
x,y=symbols('x y')
x_eq_y = Eq(x,2*y)
x_eq_y_str = str(x_eq_y) # holds 'Eq(x,2*y)' but I want it to hold 'x = 2y' or a latex formula etc

有没有可能做到这一点?


你愿意构建一个继承自 Eq 的类吗? - Stephen Rauch
@StephenRauch 当然可以!我对任何建议都持开放态度。不过,我想不要只沉迷于我上面提到的特定示例。通常来说,漂亮的打印函数是什么,如何获取它们的字符串而不仅仅是在屏幕上打印。 - Charlie Parker
1个回答

4

str只是SymPy中可用的打印函数之一。如果你想使用另一个函数,请使用它:

x_eq_y_str = latex(x_eq_y)  # get  'x = 2 y' 
x_eq_y_str = pprint(x_eq_y)  # get  x = 2⋅y 
x_eq_y_str = pprint(x_eq_y,  use_unicode=False)  # get  x = 2*y

编辑:

使用sympy 1.4版本,pprint函数不能返回字符串。可以尝试使用以下方法代替:

    x_eq_y_str = pretty(x_eq_y)  # get  x = 2⋅y 
    x_eq_y_str = pretty(x_eq_y,  use_unicode=False)  # get  x = 2*y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接