You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断SymPy通过sympify()解析的函数是否为内置函数?

区分SymPy内置函数与自定义未知函数

当你通过sympify()解析混合内置函数和自定义未知函数的表达式时,可以通过检查函数的构造器是否为UndefinedFunction实例来区分两者,实现你需要的筛选效果。

实现代码

import sympy as sp
from sympy.core.function import UndefinedFunction

def is_sympy_defined(func):
    # 内置函数的构造器不是UndefinedFunction实例,自定义未知函数则是
    return not isinstance(func.func, UndefinedFunction)

# 测试示例
expr = sp.sympify("sin(x) + foo(y)")
funcs = expr.atoms(sp.Function)

# 筛选SymPy内置函数
print([f for f in funcs if is_sympy_defined(f)])
# 输出: [sin(x)]

# 筛选自定义未知函数
print([f for f in funcs if not is_sympy_defined(f)])
# 输出: [foo(y)]

原理说明

  • SymPy解析未知函数名(如foo)时,会自动创建一个UndefinedFunction的实例作为该函数的构造器(即foo(y).func是UndefinedFunction类型)。
  • 内置函数(如sin)对应的是SymPy官方实现的具体函数类(如sympy.functions.elementary.trigonometric.sin),其构造器并非UndefinedFunction实例,因此可以通过这个属性直接区分。

额外说明

如果你自己定义了继承自sp.Function的自定义函数(而非通过字符串解析生成的未知函数),该函数的构造器也不是UndefinedFunction实例,但它不属于SymPy内置函数。如果需要区分这类函数和SymPy原生内置函数,可以进一步检查构造器的模块是否以sympy.开头:

def is_sympy_defined_strict(func):
    from sympy.core.function import UndefinedFunction
    if isinstance(func.func, UndefinedFunction):
        return False
    # 仅识别SymPy官方模块下的函数
    return func.func.__module__.startswith('sympy.')

内容的提问来源于stack exchange,提问作者rijkdw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:42:22