SymPy表达式树头部检测方法咨询(含自定义函数场景)
检测SymPy表达式的头部
内置函数场景(如cos)
对于SymPy内置函数构成的表达式,可通过表达式对象的func属性获取函数实例,再通过__name__属性拿到函数名称:
from sympy import sympify expr = sympify("cos(1-x)") # 获取头部函数名 head_name = expr.func.__name__ print(head_name) # 输出: cos # 判断是否为cos if head_name == "cos": print("该表达式的头部是cos")
原理:SymPy解析后的函数调用表达式,func属性指向构造它的内置函数对象,__name__则是该函数的字符串名称。
自定义函数场景(如somefunc)
自定义函数的检测逻辑和内置函数一致,只需确保SymPy能识别该函数,分两种情况:
1. 预先定义自定义函数
先通过Function类注册自定义函数,再解析表达式:
from sympy import sympify, Function # 注册自定义函数 somefunc = Function("somefunc") expr = sympify("somefunc(cos(x))") head_name = expr.func.__name__ print(head_name) # 输出: somefunc if head_name == "somefunc": print("该表达式的头部是somefunc")
2. 直接解析未预先定义的自定义函数
如果未预先注册,SymPy会自动将其识别为UndefinedFunction类型,依然可以通过func.__name__获取名称:
from sympy import sympify expr = sympify("somefunc(cos(x))") head_name = expr.func.__name__ print(head_name) # 输出: somefunc
额外提示
如果不确定表达式是否为函数调用,可以先判断类型:
from sympy import sympify, Function expr = sympify("x + 1") if isinstance(expr, Function): head_name = expr.func.__name__ else: print("该表达式不是函数调用形式")
内容的提问来源于stack exchange,提问作者Anton Makarov
相关产品推荐
相关产品推荐

