如何在mpmath.findroot中正确使用**kwargs参数传递额外函数参数
错误原因
你触发语法错误的核心是**kwargs = (a = 1)这段写法不符合Python语法规范:
- 首先
(a = 1)本身不是合法的Python表达式,既不能作为元组也不能作为关键字参数容器使用 - 其次
mp.findroot接收要传递给目标函数的额外参数时,不需要显式写**kwargs =,直接将关键字参数追加在findroot的入参末尾即可,也可以先把参数打包为字典再用**拆包传入。
正确实现方案
写法1:直接传递额外关键字参数
直接把要传给func的参数写在findroot的所有内置参数之后即可,findroot会自动将额外参数透传给目标函数:
from mpmath import mp def func(x, **parameters): return parameters["a"]*x*x + 1 solution = mp.findroot(f=func, x0=0.955j, solver='muller', a=1) print(solution) # 输出结果接近1j,符合a=1时f(x)=x²+1=0的根的预期
写法2:字典打包后拆包传入
如果你的额外参数是提前批量存放在字典中的,可以用**操作符拆包后传入:
from mpmath import mp def func(x, **parameters): return parameters["a"]*x*x + 1 params = {"a": 1} solution = mp.findroot(f=func, x0=0.955j, solver='muller', **params) print(solution)
优化建议
如果你不需要动态接收不定数量的额外参数,可以把func的入参改成显式参数,写法更直观,调用逻辑不需要改动:
def func(x, a): return a*x*x + 1
内容的提问来源于stack exchange,提问作者Linda
相关产品推荐
相关产品推荐

