我想检查一个 python 变量是一个 sympy 表达式。很容易检查它是否是一个 sympy 变量:
isinstance(arg, symbol.Symbol)
Run Code Online (Sandbox Code Playgroud)
但我找不到怎么做:
isinstance(arg, sympy.Expression)
Run Code Online (Sandbox Code Playgroud)
是否可以检查python变量是否包含sympy表达式或变量?
作为快速检查,我做了:
expr2 = x-y
type(expr2)
<class 'sympy.core.add.Add'>
Run Code Online (Sandbox Code Playgroud)
但我不想有一个巨大的系列 if 语句子句检查每种可能的数学表达式类型。似乎多余/愚蠢。
能够检测变量何时属于任何类型的 sympy 相关事物,然后对其采取行动(然后可能稍后检查它是否是表达式或更详细的东西......)
我认为你只需要sympy.Expr而不是sympy.Expression:
In [164]: expr2
Out[164]: x - y
In [165]: type(expr2)
Out[165]: sympy.core.add.Add
Run Code Online (Sandbox Code Playgroud)
但是如果我们看一下__bases__这种类型的:
In [166]: type(expr2).__bases__
Out[166]: (sympy.core.expr.Expr, sympy.core.operations.AssocOp)
Run Code Online (Sandbox Code Playgroud)
所以:
In [167]: isinstance(2, sympy.Expr)
Out[167]: False
In [168]: isinstance(x, sympy.Expr)
Out[168]: True
In [169]: isinstance(x-y, sympy.Expr)
Out[169]: True
Run Code Online (Sandbox Code Playgroud)