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

Python中**kwargs使用报错:函数接受6个位置参数却传入8个

问题原因及解决方案

嘿,这个错误其实是对**kwargs的使用规则理解不到位导致的,我来给你拆解一下:

错误根源

你的函数gradient_descent定义里,位置参数只有6个:g,x,y,alpha,max_its,w,而**kwargs是用来接收关键字形式传递的额外参数(比如key=value这种),不能接收位置参数。

但你调用函数的时候,在w_train后面直接传了num_pts,batch_size这两个位置参数,加上前面的6个,总共就有8个位置参数,这就触发了TypeError: gradient_descent() takes 6 positional arguments but 8 were given的报错。

另外我注意到,你的函数定义里根本没处理num_pts这个参数,所以这个参数其实是多余的,完全可以去掉。

修复步骤

1. 修正函数调用方式

把需要传入的额外参数都改成关键字参数的形式传递,去掉多余的num_pts,修改后的调用代码应该是:

weight_hist_2,train_hist_2 = gradient_descent(g,x_train,y_train,alpha_choice,max_its,w_train,batch_size=10,verbose=False)

这样所有额外参数都通过**kwargs接收,不会和位置参数冲突。

2. 优化函数内的kwargs处理(可选)

你现在的kwargs判断可以用dict.get()简化,代码更简洁:

def gradient_descent(g,x,y,alpha,max_its,w,**kwargs):
    # switch for verbose
    verbose = kwargs.get('verbose', True)  # 默认True,有传参就覆盖
    # determine num train and batch size
    num_train = y.size()[1]
    batch_size = kwargs.get('batch_size', num_train)  # 默认num_train,有传参就覆盖
    # ......

这样既保持功能不变,代码也更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:48:47