**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 humanif __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 humanif __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 humanif __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 humanif __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 humanif __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 humanif __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.xdnf.cn/news/1475214.html

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

相关文章

【收藏】欧盟CE、美国FDA法规及标准查询常用网站

01 CE法规&标准查询网站 医疗器械主管部门的网站 网址: https://www.camd-europe.eu/ 简介: CAMD的全称是Competent authorities for medical devices,翻译成中文叫做医疗器械监管机构,实际上它指的是欧盟成员国医疗器械监管机构的联盟&#xff…

NAT:地址转换技术

为什么会引入NAT? NAT(网络地址转换)的引入主要是为了解决两个问题 IPv4地址短缺:互联网快速发展,可用的公网IP地址越来越少。网络安全:需要一种方法来保护内部网络不被直接暴露在互联网上。 IPv4 &…

王老师 linux c++ 通信架构 笔记(一)linux虚拟机的安装

(0)本门课程会涉及很多知识。在此集中记录,做笔记,也可能加入别的专栏。 (1) vmware 15 的下载和密钥上网查找。 ubuntu - 16 - 04 的版本才 800 M ,来 csdn 找镜像 下载。 (2&#…

23款奔驰S400升级原厂后排电动座椅调节有哪些功能

奔驰 S400 商务版升级后排电动座椅后,通常会具备以下功能: • 电动调节功能:可以通过按钮或控制面板来调节座椅的前后、上下、倾斜等位置,以获得最佳的舒适度。 • 座椅加热功能:在寒冷的天气中,座椅加热…

计算机网络之令牌环

1.令牌环工作原理 令牌环(Token Ring)是一种局域网(LAN)的通信协议,最初由IBM在1984年开发并标准化为IEEE 802.5标准。在令牌环网络中,所有的计算机或工作站被连接成一个逻辑或物理的环形拓扑结构。网络中…

jvisualvm工具使用--添加远程监视

jvisualvm简介 jvisualvm该工具位于jdk的bin目录下,是jdk自带的可用于监控线程、内存情况、查看方法的CPU时间和内存中的对 象、已被GC的对象、反向查看分配的堆栈等,即:Java虚拟机监控、故障排查及性能分析工具。 远程监控方法 以windows端…

直面生产制造的8大核心痛点

1.制造部门的计划紊乱问题 1.1计划的重要性与常见缺陷 计划是制造部门高效运作的前提。在实际运作中,计划的缺失或不周会导致生产效率的大幅降低。常见缺陷包括: -缺乏综合的生产计划,过分依赖销售计划,忽视生产和采购的实际能…

一文学会 BootStrap

文章目录 认识BootStrap历史优缺点使用注意安装CDN源码引入包管理器 媒体查询屏幕尺寸的分割点(Breakpoints)响应式容器网格系统基本使用底层实现.container.row.col、.col-份数 网格嵌套自动布局列 Auto-layout响应式类 Responsive Class 响应式工具类-…

WAIC2024 上海 | Gooxi 全面展示智算新成果,加速人工智能落地应用

浦江之畔,大咖云集;智能浪潮,奔涌不息。7月4日,被誉为人工智能界风向标的世界人工智能大会暨人工智能全球治理高级别会议在上海盛大召开,Gooxi此次携最新AI服务器以及解决方案参与,以算为擎赋能新质生产力&…

花朵短视频:四川江兴川丰科技有限公司

花朵短视频:绽放于屏幕间的自然诗篇 在快节奏的现代生活中,我们常常渴望一抹清新与宁静,以慰藉心灵的疲惫。而花朵短视频,就像是大自然精心编织的一首首无声诗篇,四川江兴川丰科技有限公司通过手机屏幕的方寸之间&…

vue3+ts 重复参数提取成方法多处调用以及字段无值时不传字段给后端

参数提取前的写法,此写法值为空的时候也会传空字段给后端 会把无值的空字段传给后端 修改后的写法,不会把没有值的字段传给后端 // 列表和导出需要传给后端的公共参数(加 || undefined即可过滤空字段) const getCurentParam () …

举例说明深拷贝和浅拷贝

概述 简单描述一下对象的实例化过程。 创建对象的时候,或者说在实例化对象的时候 Person 类有年龄和学生类 int age 18; Student stu1 new Student(); 比如此时创建一个 age 对象,一个Student 对象,在虚拟机中,会在堆中开一…

基于mmap的读写工具封装案例

文章目录 注意事项C封装示例添加构造函数重载以支持追加模式支持文件大小动态变化异常安全性和资源泄漏预防提供更高级的数据访问接口示例代码改进 在很多高性能应用中,直接使用内存映射文件(mmap)进行文件的读写操作可以显著提高效率&#x…

工业4.0视角下:PLC转OPC UA网关的作用

在工业自动化领域,PLC(可编程逻辑控制器)是常见的控制设备,而OPC UA(开放型工业自动化统一架构)协议则是一种现代化的通信协议,用在工厂自动化系统中实现设备之间的数据交换和通信。PLC转OPC U…

极品AI大模型,抓紧收藏!整合包!

近期,科技巨头谷歌终于发布了1个月前在I/O开发者大会上预告过的Gemma 2大模型。据谷歌介绍,与第1代Gemma模型相比,新模型拥有更优的性能,推理效率也更高。我当然是,“无所谓,我会出手.jpg”,给大…

主数据深度剖析与实际应用

主数据深度剖析与实际应用 想象一下,你正在经营一家跨国连锁咖啡店。每天,全球数千家门店都在使用你的品牌,制作相同的饮品,为客户提供服务。但是,你突然发现一个问题:纽约的"拿铁"和东京的"拿铁"配方似乎不太一样。更糟糕的是,你的线上菜单和实体店菜单显…

最简单的浏览器插件启用github双因素身份验证 (2FA)方法

在github贡献一定的代码量后,github会要求启用双因素身份验证,否则登录会受到影响。一般有短信验证,app扫码验证,这里推荐一种最简单的方式,用浏览器插件验证。 首先,在edge浏览器的微软插件商店&#xff0…

人工智能赋能智慧园区,构建未来城市的科技典范

智慧工地视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

【免费资料】IEEE33节点系统参数及拓扑图visio

主要内容 对于初学配电网的同学,最经典的系统即是33节点配电网系统,在各个研究文献中出现频次最高的也是这个系统,为了让大家更好了解33节点系统参数,本次整理了系统节点、支路参数excel以及33节点网络拓扑图visio&#xff0c…

20240708 每日AI必读资讯

🤖破解ChatGPT惊人耗电!DeepMind新算法训练提效13倍,能耗暴降10倍 - 谷歌DeepMind研究团队提出了一种加快AI训练的新方法——多模态对比学习与联合示例选择(JEST),大大减少了所需的计算资源和时间。 - JE…