**kwargs 字典解包传参的方式

字典解包传参

在Python中,****kwargs**是一种通过字典解包 (dictionary unpacking) 的方式进行参数传递的方式。它将一个字典的键值对解包并传递给函数的命名参数。
在这里插入图片描述

示例代码

kwargs实参: {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
get_info形参: age, name, score, sex="man"
实参的key和get_info的形参名字要一一不然无法注入

传入**kwargs的时候, kwargs会将字典中的每个key与形参对应注入值,
情况1: 形参中必须要有kwargs中的所有key, 否则会报错,
情况2: 如果形参中有非kwargs中的key则需要设置默认值,不然也会报错

def get_info(age, name, score, sex="man"):
    human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
    return human

if __name__ == '__main__':

    # 创建一个包含参数的字典
    kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
    # 使用字典解包的方式传递参数
    res_score = get_info(**kwargs)
    print("res_score: {}".format(res_score))

**kwargs 是用于将可变长度的关键字参数传递给一个函数。kwargs 代表 “keyword arguments” (关键字参数)。当一个函数定义中使用 **kwargs,它允许函数接受任意数量的关键字参数并将它们作为一个字典处理。
执行结果
在这里插入图片描述

情况1: 形参中必须要有kwargs中的所有key, 否则会报错

kwargs中有score的key,但是函数中没有

def get_info(age, name):
    human = {"name": name, "age": age}
    return human

if __name__ == '__main__':

    # 创建一个包含参数的字典
    kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
    # 使用字典解包的方式传递参数
    res_score = get_info(**kwargs)
    print("res_score: {}".format(res_score))

报错如下:
在这里插入图片描述

解决方法

加一个变量名字
def get_info(age, name, score):

情况2: 如果形参中有非kwargs中的key则需要设置默认值,不然也会报错

kwargs中没有值为sex的key,但是函数形参中有且没有设置默认值,所以会报错

def get_info(age, name, score, sex):
    human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
    return human

if __name__ == '__main__':

    # 创建一个包含参数的字典
    kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
    # 使用字典解包的方式传递参数
    res_score = get_info(**kwargs)
    print("res_score: {}".format(res_score))

如下报错
在这里插入图片描述

解决方法

1.在get_info给sex设置一个默认参数值

def get_info(age, name, score, sex="man"):
    human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
    return human

if __name__ == '__main__':
    # 创建一个包含参数的字典
    kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
    # 使用字典解包的方式传递参数
    res_score = get_info(**kwargs)
    print("res_score: {}".format(res_score))

2.调用的get_info的时候额外传入一个参数

def get_info(age, name, score, sex):
    human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
    return human

if __name__ == '__main__':

    # 创建一个包含参数的字典
    kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
    # 使用字典解包的方式传递参数
    res_score = get_info(**kwargs, sex="man")
    print("res_score: {}".format(res_score))

其他案例

def get_info(age, name, score, sex):
    human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
    return human

if __name__ == '__main__':
    # 创建一个包含参数的字典
    kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
    kwargs2= {"sex": "man"}
    # 使用字典解包的方式传递参数
    res_score = get_info(**kwargs, **kwargs2)
    print("res_score: {}".format(res_score))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值