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

使用**kwargs格式实现函数时,无法识别任意关键字位置参数的问题

解决TypeError:调用带**kwargs的函数时传入过多位置参数的问题

你遇到的这个TypeError问题根源很清晰——你的函数build_profile只定义了2个必填的位置参数(first_name和last_name),而后面的**additional_info是用来接收关键字参数(也就是key=value格式的参数)的,不是用来接收位置参数的。你调用的时候连续传了6个位置参数,Python没办法把后面那4个参数对应到函数的参数定义里,所以直接抛出错误了。

正确的调用方式

根据你函数的设计逻辑(收集用户的额外键值对信息),你需要把额外的信息以关键字=值的形式传入,举个例子:

# 传入额外的年龄、职业、城市信息
user_profile = build_profile("x", "y", age="25", occupation="software engineer", city="shanghai")

这样调用后,**additional_info会自动把这些关键字参数转换成字典{'age': '25', 'occupation': 'software engineer', 'city': 'shanghai'},经过函数里的处理,最终返回的profile会是:

{
    'First name': 'x',
    'Last name': 'y',
    'Age': '25',
    'Occupation': 'Software Engineer',
    'City': 'Shanghai'
}

额外优化建议

另外注意你函数里的value.title()逻辑——如果传入的额外值是数字(比如age=25这种整数),直接调用title()会报错,因为整数类型没有这个方法。可以加个类型判断来避免这个问题:

def build_profile(first_name, last_name, **additional_info):
    """ Building a user profile """
    profile = {}
    profile['First name'] = first_name
    profile['Last name'] = last_name
    for key, value in additional_info.items():
        # 仅对字符串类型的值调用title()
        profile[key.title()] = value.title() if isinstance(value, str) else value
    return profile

如果你确实需要传位置参数作为额外信息

如果你的需求不是收集键值对,而是想传入多个位置参数作为额外信息,那需要把函数定义里的**additional_info改成*additional_info(单星号用来收集所有额外的位置参数为元组),但这和你原来函数里处理键值对的逻辑不符,所以还是推荐用关键字参数的方式来调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:35:46