如何让Sympy的pprint输出时省略函数的自变量参数?
问题描述
当依赖多变量的函数输出内容较长时,SymPy默认以u(x, y, z, w)的形式打印会十分繁琐。现有如下SymPy代码:
from sympy import * init_printing() x, y, z, w = symbols('x y z w') u = Function('u')(x, y, z, w) f = u.diff(x) pprint(f)
运行后输出:
∂ ──(u(x, y, z, w)) ∂x
希望修改后仅输出简化形式:
∂ ──(u) ∂x
解决方案
以下是两种可行的实现方式:
方法一:自定义PrettyPrinter
继承SymPy的PrettyPrinter类,重写函数调用的打印逻辑,只保留函数名:
from sympy import * from sympy.printing.pretty import PrettyPrinter class SimplifiedFuncPrinter(PrettyPrinter): def _print_Function(self, expr): # 仅打印函数名称,不输出参数列表 return self._print(Symbol(expr.func.__name__)) init_printing() x, y, z, w = symbols('x y z w') u = Function('u')(x, y, z, w) f = u.diff(x) # 使用自定义打印机输出 SimplifiedFuncPrinter().print(f)
执行后会输出目标简化格式。
方法二:临时替换为同名符号(快速方案)
如果只是临时需要简化打印,可将函数调用替换为同名符号,打印完成后再恢复原表达式:
from sympy import * init_printing() x, y, z, w = symbols('x y z w') u_func = Function('u')(x, y, z, w) u_sym = Symbol('u') # 将表达式中的函数调用替换为符号 f_simplified = u_func.diff(x).subs(u_func, u_sym) pprint(f_simplified)
该方法操作简单,但仅适用于无需后续对原函数表达式进行计算的场景。
内容的提问来源于stack exchange,提问作者froggiecroaks
相关产品推荐
相关产品推荐

