当前位置: 首页 > news >正文

【python基础】魔法参数*args, **kwargs的使用

文章目录

  • 前言
  • 一、*args 和 **kwargs 是什么?
  • 二、*args 的用法
    • 打包参数:将不定数量的参数传递给一个函数
    • 拆分参数:调用一个函数
  • 三、**kwargs 的用法
    • 打包参数:将不定数量的参数传递给一个函数
    • 拆分参数:调用一个函数
  • 四、位置参数、*args 和 **kwargs 的组合使用


前言

Python中传递可变参数的方式有两种,位置参数(positional argrment)和关键词参数(keyword argument)。
本文主要讲魔法参数 *args和 **kwargs 的如何使用,如何将不定数量的参数传递给一个函数和调用一个函数。


一、*args 和 **kwargs 是什么?

  • *args 和 **kwargs 都是python中的可变参数。
  • *args可以用来表示任何多个无名参数,本质上是tuple类型
  • **kwargs可以用来表示关键字参数,本质上是dict类型
def func1(*args,**kwargs):print(type(args))print(args)print(type(kwargs))print(kwargs)
func1(1,2,'hello world',a=4,b=6,c='oo',d=[])

在这里插入图片描述

  • *args和 **kwargs 重要是前面的*,你也可以写 *var和**vars,而写成 *args和 **kwargs 只是程序员通俗写法。
def func1(*var,**var2):print(type(var))print(var)print(type(vars))print(vars)
func1(1,2,'hello world',a=4,b=6,c='oo',d=[])

运行结果跟上面的使用*args和 **kwargs的一致。

  • *args参数必须在**kwargs前面,因为位置参数必须在关键词参数前面。

如果把**kwargs放在*args前面,会报错:无效引用。

def func1(**kwargs,*args):print(type(args))print(args)print(type(kwargs))print(kwargs)
func1(a=4,b=6,c='oo',d=[],1,2,'hello world')

在这里插入图片描述


二、*args 的用法

打包参数:将不定数量的参数传递给一个函数

举例1: 将非键值的可变数量的参数列表给一个函数。

def func1(*args):for i in args:print("arg throuth args:{}".format(i))
func1(1,2,3,4,5)

在这里插入图片描述

举例2: 函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把还未分配出去的实参以元组形式打包(pack),分配给那个带∗的形参。

def func1(x,*args):print("a:{}".format(x))print("number:{}".format(args))print(type(args))
func1(1,2,3,4,5)

在这里插入图片描述

从例子中可以看出,args接受了实参变成了(2,3,4,5),第一个参数1被形参接受走了。

def func1(x,y,*args):print("a:{}".format(x))print("b:{}".format(y))print("number:{}".format(args))print(type(args))
func1(1,2,3,4,5)

在这里插入图片描述

从例子中可以看出,args接受了实参变成了(3,4,5),第一个参数1被形参x接受走了,第二个参数2被形参y接受走了。

举例3: 如果把*args放在位置参数前面,需要将在参数传入时,明确定义 *args后面的位置参数定义,否则会报错。

把 *args放在前面

def func1(*args,x,y):print("a:{}".format(x))print("b:{}".format(y))print("number:{}".format(args))print(type(args))
func1(1,2,3,x=4,y=5)

在这里插入图片描述

把 *args放在中间

def func1(x,*args,y):print("a:{}".format(x))print("b:{}".format(y))print("number:{}".format(args))print(type(args))
func1(1,2,3,4,y=5)

在这里插入图片描述

拆分参数:调用一个函数

*args是把打包了的参数拆成单个的,依次赋值给函数的形参。

举例

def func1(arg1,arg2,arg3):print(arg1,'\n',arg2,'\n',arg3)
args=[1,2,3]
func1(*args)

在这里插入图片描述


三、**kwargs 的用法

打包参数:将不定数量的参数传递给一个函数

**kwargs可以用来发送一个不定长度键值对的字典参数给一个函数。

举例

def func1(**kwargs):for key,value in kwargs.items():print("{0}=={1}".format(key,value))
func1(a=4,b=6,c='oo',d=[])

在这里插入图片描述

拆分参数:调用一个函数

**kwargs是把字典的键值拆成单个的,依次赋值给函数的形参。

举例

def func1(arg1,arg2,arg3):print(arg1,'\n',arg2,'\n',arg3)kwargs={'arg1':1,'arg2':2,'arg3':3}
func1(**kwargs)

在这里插入图片描述


四、位置参数、*args 和 **kwargs 的组合使用

位置参数、*args、**kwargs 三者的顺序 必须是: 位置参数、*args、**kwargs

举例

def func1(x,*args,**kwargs):print(x)print(args)print(kwargs)
func1(1,2,3,4,a='hh',b='worl',c='soda')

在这里插入图片描述


参考文档:
https://blog.csdn.net/GODSuner/article/details/117961990
https://zhuanlan.zhihu.com/p/51236818

相关文章:

【python基础】魔法参数*args, **kwargs的使用

文章目录 前言一、*args 和 **kwargs 是什么?二、*args 的用法打包参数:将不定数量的参数传递给一个函数拆分参数:调用一个函数 三、**kwargs 的用法打包参数:将不定数量的参数传递给一个函数拆分参数:调用一个函数 四…...

Android Icon 添加水印 Python脚本

源代码 # -*- coding: utf-8 -*- from PIL import Image 图片合成def mergePictureLXJ():commonIcon Image.open("icon.png")markIcon Image.open("领现金.png")markLayer Image.new(RGBA, commonIcon.size, (0, 0, 0, 0))markLayer.paste(markIcon, (0…...

选择Centos系统需不需要带SElinux?

CentOS 7的SELinux代表"Security-Enhanced Linux",它是一个Linux操作系统的安全增强功能。SELinux是一个强制访问控制(Mandatory Access Control,MAC)系统,它在操作系统级别提供了更加精细的访问控制和安全策…...

项目级asp.net框架的LIMS实验室管理系统源码

LIMS可用于管理完整的实验程序,从样品登记到检验、校核、审核到最终批准报告,建立在过程质量控制的基础上,对检测流程进行有效全面的管理,对影响质量的人、机、料、法、环因素加以控制,同时为质量改进提供数据依据。进…...

pthread 变量静态初始化 避免使用被销毁过的变量

pthread 变量静态初始化 互斥锁:pthread_mutex_t g_mutex PTHREAD_MUTEX_INITIALIZER;读写锁:pthread_rwlock_t g_rwlock PTHREAD_RWLOCK_INITIALIZER;条件变量:pthread_cond_t g_cond PTHREAD_COND_INITIALIZER; 适用场景 以互斥锁为例…...

深度学习之基于ResNet18的神经网络水果分类系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介二、功能三、神经网络水果分类系统四. 总结 一项目简介 基于ResNet18神经网络的水果分类系统是一个利用深度学习技术进行水果图像分类的系统。下面是该系统…...

并查集易错点

并查集就俩核心点,1是找父节点,2是合并 1: return fa[x] x ? x : fa[x] find(fa[x]); 2. fa[find(a)] find(b) 第二步还挺容易写错的,左边是find(a)的根,而不是fa[a]...

车载网关产品解析(附:车载网关详细应用案例及部署流程)

5G车载网关是一款功能强大的工业级无线通讯设备。它集成了4G/5G双模网络模块、M12接口设计、强大的路由和安全功能等特性,可以为车载和移动应用提供稳定可靠的无线数据连接。 链接直达:https://www.key-iot.com/iotlist/sv900.html ### 产品特性 5G车载网关最大的…...

高校教务系统登录页面JS分析——天津大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍天津大学教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密…...

68 内网安全-域横向PTHPTKPTT哈希票据传递

目录 演示案例:域横向移动PTH传递-Mimikatz域横向移动PTK传递-Mimikatz域横向移动PTT传递-MS14068&kekeo&local国产Ladon内网杀器测试验收-信息收集,连接等 涉及资源: PTH(pass the hash) #利用lm或ntlm的值进行的渗透测试 PTT(pass the ticket) #利用的票据凭证TGT进行…...

【1】2023版密评算分工具

0X01 前言 工具根据商用密码应用安全性评估量化评估规则(2023年8月1日实施)实现 0x02 工具功能介绍 给定D A K的打分结果,计算单个测评对象和测评单元得分。根据测评单元得分计算测评层面得分根据测评层面得分计算报告整体得分配置文件说明…...

人工智能常用网站

ModelScope - 模型列表页 https://huggingface.co/models...

OpenLayers实战,OpenLayers结合下拉菜单实现城市切换,动态切换城市边界到地图视图视角范围内

专栏目录: OpenLayers实战进阶专栏目录 前言 本章是OpenLayers综合实战案例,使用OpenLayers结合下拉菜单实现城市切换,动态切换城市边界到地图视图视角范围内。 本章需要使用到ElementUI的下拉框组件和OpenLayers的TopoJson格式解析地市边界数据并负责渲染,通过动态创建s…...

UE5 日记(人物连招:蒙太奇动画通知(含视频链接))

教程https://www.youtube.com/watch?vsWpENaVGj2M&listPLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index10&ppiAQB 相关蓝图 连招逻辑 动画通知类 逻辑分析 1.用户输入 已搭载战斗系统模块,可以收到输入指令 2.连击 第一次攻击: 第一次攻击,…...

葡萄酒是如何从葡萄园到你的酒杯的?

根据定义,我们称葡萄酒的美味花蜜是葡萄酒精发酵的产物。也有果酒,或乡村酒,是由发酵的水果制成的。然而,传统意义上的葡萄酒是由酿酒葡萄制成的。好吧,一切都是在几个步骤中完成的,来自云仓酒庄品牌雷盛红…...

Oracle Exadata X7-2掉电宕机导致集群无法启动处理过程

文章目录 前言一、当前的状态是什么?二、集群启动异常怀疑对象1.排查心跳网络异常ping自己私有IP延迟高ping其它主机私有IP不通 2.是否发生过重启 三、日志信息收集ocssd.trc集群crs日志cell的griddisk状态及报错 四、IB交换机的问题排查处理五、紧急恢复业务在IB完…...

锐捷RG-EW1200G登录绕过漏洞复现

文章目录 锐捷RG-EW1200G登录绕过漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.复现 0x06 修复建议 锐捷RG-EW1200G登录绕过漏洞复现 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、…...

Python之循环语句

循环普遍存在于日常生活中,同样,在程序中,循环功能也是至关重要的基础功能。 循环在程序中同判断一样,也是广泛存在的,是非常多功能实现的基础 while循环的基础语法 生活中的循环 程序中的循环 只要条件满足 会无限循…...

python中使用websocket调用、获取、保存大模型API

笔者最近在测试星火大模型的时候,他们是使用websocket 来建立对话,而且星火大模型开放的测试代码,质量上不咋地(20231030记录),还需要对websocket有一定的了解,才适合自己微调。 安装&#xff…...

Linux的账号管理

本章的学习感觉如果不做系统管理员,作为简单了解就可以了 前面介绍了,用户,组,other三个角色, 每个用户创建都会有uid与之对应,创建的用户基本信息在一下两个文件中,也是我们要介绍的内容&…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...