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

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中*和**的打包和解包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值