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

news2024/11/26 2:28:46

字典解包传参

在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))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1903859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

下载linux的吐槽

本来这几天放假了,想下一个linux玩一玩 教程(我就是根据这个教程进行下载的,但是呢在进行修改BIOS 模式的 地方遇见了困难,也许是电脑修过的原因,我狂按F12 以及 FnF12都没有BIOS设置,只有一个让我选择用w…

前端扫盲:cookie、localStorage和sessionStorage

cookie、localStorage和sessionStorage都是存储数据的方式,他们之间有什么不同,各有什么应用场景,本文为您一一解答。 一、什么是cookie、localStorage和sessionStorage 1. Cookie是一种存储在用户计算机上的小型文本文件,由服务…

子数组按位与为k

注意这里的子数组是连续的非空的数组&#xff0c;我们要学会与处理就是求交集 class Solution { public:long long countSubarrays(vector<int>& nums, int k) {long long ans 0;for (int i 0; i < nums.size(); i) {int x nums[i];for (int j i - 1; j > …

通过消息传递同步操作

通信顺序进程&#xff08;CSP&#xff09; 是一种形式语言&#xff0c;用来描述并发性系统间进行交互的模式 每个线程或进程独立运行&#xff0c;它们之间仅通过消息传递进行通信&#xff0c;而不是直接共享状态 每个线程实际上都是一个状态机&#xff1a;当它接收到一条消息时…

Zabbix监控软件

目录 一、什么是Zabbix 二、zabbix监控原理 三、zabbix 安装步骤 一、什么是Zabbix ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的…

基于LoFTR_TRT项目实现LoFTR模型的trt推理与onnx推理,3060显卡下320图像30ms一组图

本博文主要记录了使用LoFTR_TRT项目将LoFTR模型导出为onnx模型&#xff0c;然后将onnx模型转化为trt模型。并分析了LoFTR_TRT与LoFTR的基本代码差异&#xff0c;但从最后图片效果来看是与官网demo基本一致的&#xff0c;具体可以查看上一篇博客记录。最后记录了onnx模型的使用【…

深入探索 Python 中的数据维数:高维数据处理方法与应用

Python 数据维数 在数据科学和机器学习领域&#xff0c;理解数据的维度是至关重要的。Python作为一种强大而灵活的编程语言&#xff0c;提供了丰富的工具和库来处理各种维度的数据。本文将介绍Python中数据维数的概念&#xff0c;以及如何使用Python库来处理不同维度的数据。 什…

27 防火墙不同区域之间是如何通信

26 华三防火墙安全区域-CSDN博客 目标实现不同区域的通信 1 给防火墙配置IP地址 WEB页面配置IP地址 2 在PC机上配置对应对IP地址 &#xff08;该要启用的接口一定要启用 IP地址 子网掩码 网关 一定要查看好&#xff09; 3 将配置好的IP地址对应的不同接口加入到不同的区域上去 …

关于忠诚:忠于自己的良知、理想、信念

关于忠诚&#xff1a; 当我们面对公司、上司、爱人、恋人、合作伙伴还是某件事&#xff0c;会纠结离开还是留下&#xff0c;这里我们要深知忠诚的定义&#xff0c;我们不是忠诚于某个人、某件事、或者某个机构&#xff0c;而是忠诚于自己的良知&#xff0c;忠诚于自己的理想和…

【计算机毕业设计】020基于weixin小程序订餐系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

分班结果老师怎么发给家长?

分班结果老师怎么发给家长&#xff1f; 随着新学期的脚步渐近&#xff0c;老师们的工作也变得愈发繁忙。从准备教学计划到整理课程材料&#xff0c;每一项任务都不容小觑。而其中&#xff0c;分班结果的告知工作&#xff0c;更是让不少老师头疼不已。传统的分班通知方式&#…

【电路笔记】-AB类放大器

AB类放大器 文章目录 AB类放大器1、概述2、AB类放大器介绍3、AB类放大器效率4、偏置方法4.1 电压偏置4.2 分压网络4.3 电位器偏置4.4 二极管偏置5、二极管网络和电流源6、AB类放大器的电源分配7、总结1、概述 A类放大器提供非常好的输出线性度,这意味着可以忠实地再现信号,但…

Linux——进程间通信一(共享内存、管道、systrem V)

一、进程间通信介绍 1.1、进程间通信的概念和意义 进程间通信(IPC interprocess communication)是一组编程接口&#xff0c;让不同进程之间相互传递、交换信息(让不同的进程看到同一份资源) 数据传输:一个进程需要将它的数据发送给另外一个进程 资源共享:多个进程之间共享同样…

webGL可用的14种3D文件格式,但要具体问题具体分析。

hello&#xff0c;我威斯数据&#xff0c;你在网上看到的各种炫酷的3d交互效果&#xff0c;背后都必须有三维文件支撑&#xff0c;就好比你网页的时候&#xff0c;得有设计稿源文件一样。WebGL是一种基于OpenGL ES 2.0标准的3D图形库&#xff0c;可以在网页上实现硬件加速的3D图…

世界人工智能大会中“数据+标注”相关的关键词浅析

标注猿的第79篇原创 一个用数据视角看AI世界的标注猿 大家好&#xff0c;我是AI数据标注猿刘吉&#xff0c;一个用数据视角看AI世界的标注猿。 在国家级数据标注基地建设任务下发后的两个月时间里&#xff0c;全国各地政府、各个高校都快速行动了起来&#xff0c;数据行…

【Linux】压缩命令——gzip,bzip2,xz

1.压缩文件的用途与技术 你是否有过文件太大&#xff0c;导致无法以正常的E-mail方式发送&#xff1f;又或学校、厂商要求使用CD或DVD来做数据归档之用&#xff0c;但是你的单一文件却都比这些传统的一次性存储媒介还要大&#xff0c;那怎么分成多块来刻录&#xff1f;还有&am…

局部静态变量实现的单例存在多个对象

文章目录 背景测试代码运行测试尝试打开编译器优化进一步分析 背景 业务中出现日志打印失效&#xff0c;发现是因为管理日志对象的单例在运行过程中存在了多例的情况。下面通过还原业务场景来分析该问题。 测试代码 /* A.h */ #ifndef CALSS_A #define CALSS_A#include <…

Docker 容器网络及其配置说明

Docker 容器网络及其配置说明 docker容器网络docker的4种网络模式bridge 模式container模式host 模式none 模式应用场景 docker 容器网络配置Linux 内核实现名称空间的创建创建 Network Namespace操作 Network Namespace 转移设备veth pair创建 veth pair实现 Network Namespac…

nature methods | 11种空间转录组学技术的系统性比较

—DOI: 10.1038/s41592-024-02325-3 Systematic comparison of sequencing-based spatial transcriptomic methods 学习了一下空间转录组技术怎么做benchmark&#xff0c;从多个的角度去考虑目前技术的性能&#xff0c;受益良多。但该研究缺少对10X Visium HD的测评&#xff…

mac怎么压缩pdf文件大小,mac压缩pdf文件大小不改变清晰度

在数字化时代&#xff0c;pdf格式因其良好的兼容性和稳定性&#xff0c;成为了文档分享和传输的首选。然而&#xff0c;随着文件内容的丰富&#xff0c;pdf文件的体积也越来越大&#xff0c;给存储和传输带来了不小的困扰。本文将揭秘几种简单有效的pdf文件压缩方法&#xff0c…