如何用cubic()函数动态生成可调用的三次多项式solve()函数?
问题描述
最初需要实现一个三次多项式函数,示例如下:
def solve(x): return 5*x*x*x + 4*x*x + 3*x + 2
该函数会被代入x值用于求解三次方程。
现在需求变更为:从termsList列表中获取三次多项式的系数,通过cubic()函数动态生成solve()函数,且需满足以下固定要求:
cubic()仅接受4个系数作为参数cubic()的返回结果必须存储在solve1变量中solve()函数必须由cubic()运行后生成- 生成的
solve()函数需能在后续独立函数中调用
用户尝试的代码如下,但执行失败:
def cubic(a, b, c, d): def solve(x): return float(a)*x*x*x, float(b)*x*x, float(c)*x, float(d) solve1= cubic(termsList[0], termsList[1], termsList[2], termsList[3]) solving(solve(x))
解决方案
你的代码存在三个核心问题:
- 内部
solve()函数返回的是元组(逗号分隔的多值),而非三次多项式的求和结果 cubic()函数未返回内部定义的solve函数,导致solve1实际为None- 调用时错误使用未定义的
solve(x),应使用生成的solve1
修正后的代码如下:
def cubic(a, b, c, d): def solve(x): # 计算三次多项式的求和结果,而非返回多个项的元组 return float(a) * x**3 + float(b) * x**2 + float(c) * x + float(d) # 返回内部的solve函数,使cubic的返回值成为可调用的函数对象 return solve # 从termsList取系数生成目标函数 solve1 = cubic(termsList[0], termsList[1], termsList[2], termsList[3]) # 后续调用时直接使用solve1并传入x值 solving(solve1(x)) # x为你需要代入的具体数值
关键说明:
cubic()作为工厂函数,借助闭包特性让内部的solve函数保留对a,b,c,d参数的引用- 使用
x**3替代x*x*x,代码更简洁易读 - 生成的
solve1是可独立调用的函数,完全满足后续使用要求
内容的提问来源于stack exchange,提问作者SNAKEorino
相关产品推荐
相关产品推荐

