当前位置: 首页 > 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与之对应,创建的用户基本信息在一下两个文件中,也是我们要介绍的内容&…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...