我正在寻找一种在 Sympy 表达式中查找功能参数的可靠方法。例如,在下面的示例中,如何f从检索operator?
import sympy
x, y = sympy.symbols('x y')
f = sympy.Function('f')
operator = x*f(x, y).diff(x) + y*f(x, y)
print(operator.free_symbols)
# prints {x, y}
Run Code Online (Sandbox Code Playgroud)
小智 5
该方法返回作为该类实例expr.atoms(class)的所有对象的集合。expr所以,
operator.atoms(sympy.Function)
Run Code Online (Sandbox Code Playgroud)
将返回f(x, y)。如果您想忽略函数的参数,请使用
[a.func for a in operator.atoms(sympy.Function)]
Run Code Online (Sandbox Code Playgroud)
(对于 SymPy 对象a,a.func是其“函数”部分,a.args是其“参数”部分。)
请注意,如果operator包含,例如sin(x),,它也将包含在上面的代码中。要仅返回未定义(非内置)函数,请将sympy.Functionby替换sympy.function.AppliedUndef为 中的类选择器atoms。