Scipy Optimize语法错误求助:位置参数位于关键字参数之后
解决
SyntaxError: positional argument follows keyword argument 错误 嘿,这个错误我之前调代码时也踩过坑!其实根源特别简单——Python语法要求所有位置参数必须放在关键字参数的前面,而你写的代码刚好违反了这个规则。
先看你报错的那行代码:
SLSQP_result=optimize.minimize(lambda x: obj(x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9]), method='SLSQP',initial_guess, bounds=bnds,constraints=cons)
这里method='SLSQP'是关键字参数(用key=value的形式传递),但紧接着的initial_guess是位置参数——你没给它指定对应的参数名(scipy.optimize.minimize里初始猜测的参数名是x0),所以Python会把它当作位置参数处理,但它却出现在了关键字参数之后,这就直接触发了语法错误。
给你两种修复方案:
- 方案一:调整参数顺序,把
initial_guess移到所有关键字参数前面:
SLSQP_result=optimize.minimize(lambda x: obj(x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9]), initial_guess, method='SLSQP', bounds=bnds,constraints=cons)
- 方案二:给
initial_guess加上参数名x0=,把它变成关键字参数,这样参数顺序就不受限制了:
SLSQP_result=optimize.minimize(lambda x: obj(x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9]), method='SLSQP', x0=initial_guess, bounds=bnds,constraints=cons)
个人更推荐方案二,因为显式指定参数名能让代码可读性更强,尤其是scipy.optimize.minimize这类参数较多的函数,明确写出x0、method等参数名,后续自己或别人维护代码时能一眼看懂每个参数的作用。
内容的提问来源于stack exchange,提问作者Alana Wilson
相关产品推荐
相关产品推荐

