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

Python sympy库lambdify在自定义函数内运行报错问题求助

问题原因
  • symbols()方法的作用是创建SymPy符号变量,入参应为变量名字符串,你调用derive(5, 'x**2')时将数值5作为第一个参数传入,执行x = symbols(x)时会生成值为5的数字符号,后续lambdify会将该符号作为生成函数的形参名,而Python语法不允许函数形参为数值,因此触发语法错误。
  • 你混淆了「生成可调用计算函数」和「传入数值执行计算」两个步骤,且参数传递逻辑错误:derive函数第一个入参本该是表达式对应的自变量名称,而非要代入的数值。
  • 外部代码可正常运行的原因是你提前定义了x为符号变量,lambdify(x, x**2)用符号x作为生成函数的形参,调用时传入5作为实参,完全符合语法逻辑。
解决方法

场景1:先得到可调用函数,再多次传入数值计算

from sympy import symbols, lambdify, sympify

def derive(var_name: str, expr_str: str):
    # var_name为自变量名称,比如'x';expr_str为表达式字符串
    var = symbols(var_name)
    expr = sympify(expr_str)
    return lambdify(var, expr)

# 调用示例
f = derive('x', 'x**2')
print(f(5)) # 输出结果:25

场景2:直接传入数值得到计算结果

from sympy import symbols, lambdify, sympify

def calculate_expr(var_name: str, expr_str: str, input_val: float|int):
    var = symbols(var_name)
    expr = sympify(expr_str)
    f = lambdify(var, expr)
    return f(input_val)

# 调用示例
print(calculate_expr('x', 'x**2', 5)) # 输出结果:25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:48:02