python中的*,**与*args,**kwargs

2023-10-31

0 前言

python是一门及其灵活的语言,这一点在python函数中的不定参数传递也具有很好的提现。我们在使用python函数的时候,会经常看到*args,**kwargs两个参数,这两个参数表示什么意思,这里的*和**又表示什么意思?这里我们进行一探究竟。

1 用作算符运算符

首选最基本的用法,用作算术运算符。
*:乘法运算
**:幂运算
这个大家应该都比较清楚,下面看一个简单的例子:
在这里插入图片描述

2 用作打包运算符

2.1 用作函数形参

作为打包运算符,和**经常用于函数的形参中,就是我们通常所见的,在函数定义的啥时候使用args和**kwargs参数。
例如:
在这里插入图片描述
通过上面的例子可以看到:

  1. args的类型为元组,*的作用是将多个参数打包为元组,如果没有多余的参数,则为空的元组。
  2. kwargs的类型为字典,*的作用是将key-value对参数打包为字典,如果没有多余的key-value对参数,则为空的字典。
  3. 使用*args可以使得函数接收不定数量的参数。
  4. 使用**kwargs可以使函数接收不定数量,不定key的key-value对,非常方便灵活。
  5. 另外还有一点需要提醒,这里的args,kwargs是参数名称,可以随意取,只不过args,kwargs是习惯用法,大家有个了解,不建议随便更改。

2.2 用作序列打包

在这里插入图片描述
可以看到,这里*还可以用作序列打包,在多变量赋值的时候将多余的值放到一个列表中。

3 用作解包运算法

3.1 用作函数实参

不仅是在定义函数的时候会使用*和**,在调用函数的时候,我们也会使用这两个符号,作用是解包。
比如:
在这里插入图片描述
通过上面的例子可以看到:

  1. unpack_param(*param)等价于unpack_param(param[0],param[1],param[2],param[3]),*作用是相当于将列表或者元组中的数据按照顺序传递进函数。
  2. unpack_param(**dict_param)等价于unpack_param(a=dict_param[‘a’],b=dict_param[‘b’],c=dict_param[‘c’],d=dict_param[‘d’]),**作用是相当于将字典中的数据按照key=value的形式传递进函数,由于指定了key,所以顺序无所谓,函数调用会根据key进行匹配。

3.2 用作序列解包

在这里插入图片描述
通过上面的例子可以看出:

  1. a,b,c = [1,2,3] 将序列的内容解包到a,b,c
  2. a,b,c = [1,2,3,4]将序列的内容解包到a,b,c,这里虽然对list进行了解包,但是的作用仍然可以理解为打包,将解包多余的元素打包到一起,到c。

4 打包和解包的混合使用

为了更深刻理解,和**的用法,我们来定义一个形式很复杂,但是功能很简单的函数。
在这里插入图片描述
如果前面几部分对
和**的讲解,具有深刻的理解,相信理解这个函数并不难。如果不太理解,多看几遍,自己动手多写写。

参考文献:

  1. python中**是什么
  2. Python3 * 和 ** 运算符
    3.学习 python有趣的解包用法
  3. python中*和**的打包和解包
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中的*,**与*args,**kwargs 的相关文章

随机推荐

  • Android Paint之函数大汇总

    作者 as pixar 链接 https www jianshu com p 34536b1bdbf9 来源 简书 一 函数 含义 基本用法 reset 重置画 setColor int color 给画笔设置颜色值 setARGB int
  • 基于RBM-DBN深度学习网络的数据分类matlab仿真

    基于RBM DBN深度学习网络的数据分类matlab仿真 深度学习在计算机视觉 语音识别 自然语言处理等领域中取得了重大的进展 其中 RBM DBN Restricted Boltzmann Machine Deep Belief Netw
  • 解决PowerDesigner中Name与Code同步的问题。

    PowerDesigner中 但修改了某个字段的name 其code也跟着修改 这个问题很讨厌 因为一般来说 name是中文的 code是字段名 解决方法如下 1 选择Tools gt GeneralOptions 菜单 出现General
  • mybatis的接口绑定方式(注解绑定和配置xml文件)

    目录 一 配置xml文件 步骤 1 创建pojo类 Student对象 2 创建StudentMapper接口 3 创建mapper xml配置文件 4 在mymybatis config xml中添加StudentMapper配置 5 创
  • at指令集

    AT指令中文手册 2 1 简介 5 1 1 名词术语 5 1 2 AT 命令简介 5 2 AT 命令祥解 5 2 1 一般命令 5 2 1 1 AT CSCS 选择TE 字符集 2 7 补充业务命令
  • python中判断整数和整型的方法

    我们先看一下什么整数和整型 整数 integer 是正整数 零 负整数的集合 整型 计算机中的一个基本的专业术语 指没有小数部分的数据 来这百度百科 猛一看整数和整型没有区别 所以网上有一堆使用使用isinstance来判断一个数是否是整数
  • 【Java】抽象类和接口

    并没有那么多天赋异禀 优秀的人总是努力翻山越岭 目录 1 抽象类 1 1 抽象类的概念 1 2 抽象类的语法 1 3 抽象类的特性 1 4 抽象类的作用 2 接口 2 1 接口的概念 2 2 接口的语法规则 2 3 接口的使用 2 4 接口
  • windbg调试驱动不用替换调试机器驱动的方法

    开发windows驱动 通常调试驱动的方法是在主机上编写代码编译通过 将sys和inf拿到被调试机台上安装测试 主机通过windbg连上调试机台 当代码有改动时 将编译好的驱动再拿到被调试机台上安装测试 每次都拷贝到调试机台上安装驱动这个动
  • 报错jinja2.exceptions.UndefinedError: ‘form‘ is undefined

    这是我在写flask项目时报的错误 报错原因 是因为两个视图函数引用了同一个模板 模板中使用了jinja2 其中一个视图函数没有使用其语法 所以报了以上错误 解决方法 只需要把两个视图所引用的模板分开写就可以了
  • 工具:valgrind学习

    Valgrind手册 Quick start 文章目录 概述 体系结构 Valgrind 原理 安装 编译时需要注意 快速入门 LEAK SUMMARY 内存泄漏总结 分类 实践 第一个例子 没有内存泄漏 第二个例子 只申请内存而不释放 编
  • 个人理解Vue和React区别

    监听数据变化的实现原理不同 Vue 通过 getter setter 以及一些函数的劫持 能精确知道数据变化 不需要特别的优化就能达到很好的性能 React 默认是通过比较引用的方式进行的 如果不优化 PureComponent shoul
  • 睿智的目标检测29——Keras搭建YoloV4目标检测平台

    睿智的目标检测29 Keras搭建YoloV4目标检测平台 学习前言 什么是YOLOV4 代码下载 YOLOV4改进的部分 不完全 YOLOV4结构解析 1 主干特征提取网络Backbone 2 特征金字塔 3 YoloHead利用获得到的
  • Latex-数学公式-网站

    mohu org info symbols symbols htm 常见问题 Xmind思维导图 中文官方网站 一些使用 normalsize textcircled scriptsize 2 n n 1 2n 2 1
  • 西门子模块选择pdf_「西门子1200PLC教程」17.硬件的组态

    头条号私信回复1 可免费获取海量资源下载链接 目录 1 添加新设备 2 添加模块 3 编辑属性和参数 4 组态设备网络 在S7 1200中 当用户新建一个项目时 应先进行硬件组态 硬件组态是编写项目程序的基础 在STEP7 Basic中 组
  • sql 判断两个字段是否相同_判断两个工作表中相同记录的SQL语句写法

    大家好 今日继续VBA数据库解决方案的讲解 今日讲解的是第47讲 内容是 在两个工作表提取数据记录 并显示相同记录的报告 我们在工作中经常会遇到这样的情况 要分析两个工作表 知道哪些记录是重复的 如果不用ADO解决 只用EXCEL来解决 该
  • signature=632120ed2e762a810e77edecc3de4568,zguide2/.signatures at master · imatix/zguide2 · GitHub

    9ac433a6bf5e85fc6c684ec22d64141aae1b79e0 examples Scala rrworker scala c9bcc4aabb7a713ad989d43af1eb6293b77da4e4 examples
  • 浏览器怎么扫描二维码_二维码的用法

    二维码是什么 说起来并不复杂 任何信息都可以通过特定的编码算法转化为二维码 我们常见的一段复杂信息 比如一个很长的URL 一些加密后的字符串 或者一个复杂的快递编号 如果人工输入是非常繁琐并且误差很大的 但如果把文本转化为二维码 通过扫描枪
  • 【分类器】感知机+线性回归+逻辑斯蒂回归+softmax回归

    一 感知机 详细参考 https blog csdn net wodeai1235 article details 54755735 1 模型和图像 2 数学定义推导和优化 3 流程 二 线性回归 1 定义及解析解 a XTX 1 XTy
  • 【Android Studio】AndroidManifest

    Android Studio AndroidManifest 去除标题栏 android theme style Theme AppCompat DayNight NoActionBar gt 更改图标 android icon mipma
  • python中的*,**与*args,**kwargs

    python中的 与 args kwargs 0 前言 1 用作算符运算符 2 用作打包运算符 2 1 用作函数形参 2 2 用作序列打包 3 用作解包运算法 3 1 用作函数实参 3 2 用作序列解包 4 打包和解包的混合使用 0 前言