#深入解析# Python中的 * 和 ** 运算符


Python中 *的作用

  1. 乘法运算
  2. 列表等数据结构进行解包
  3. 多变量赋值时获取多个元素
  4. *前缀的函数形参能够接受任意个非关键字参数(键值对)

Python中 **的作用

  1. 指数运算
  2. 字典变量进行解包
  3. *前缀的函数形参能够接受任意个关键字参数

光看字面上的解释可能难于理解,下边通过几个例子来具体说明

1. *

1.1 乘法运算

乘法运算这里不做赘述

1.2 解包

*可以对列表、元组、字符串、字节序列进行解包操作

>>> def fun(data1, data2, data3):
...     print("data1: ", data1)
...     print("data2: ", data2)
...     print("data3: ", data3)
... 
>>> args = ("one", 2, 3)
>>> fun(*args) #等价于 fun("one", 2, 3)
data1:  one
data2:  2
data3:  3

通过上述例子可知,*argsargs变量拆分成了三个子元素并作为三个实参传递给了fun函数

1.3 多变量赋值时获取多个元素

1.3.1 获取剩余部分

>>> a, b, *c = 0, 1, 2, 3
>>> a
0
>>> b
1
>>> c
[2, 3]

1.3.2 获取中间部分

>>> a, *b, c = 0, 1, 2, 3
>>> a
0
>>> b
[1, 2]
>>> c
3

1.3.3 如果左值比右值要多,那么带 * 的变量默认为空

>>> a, b, *c = 0, 1
>>> a
0
>>> b
1
>>> c
[]

>>> a, *b, c = 0, 1
>>> a
0
>>> b
[]
>>> c
1

1.3.4 嵌套解包

>>> (a, b), (c, d) = (1, 2), (3, 4)
>>> a
1
>>> b
2
>>> c
3
>>> d
4
>>> a, b, c, d
(1, 2, 3, 4)

1.4 带*前缀的函数形参能够接受任意个非关键字参数

>>> def fun(a, *args):
		print(args)
... 
>>> fun("Geek", "dog", "cat")
('dog', 'cat')

通过上述例子可知,p1接受了第一个参数"Geek",args接受了"Geek"之后的所有参数并在内部转化成了元组的形式

2.**

2.1 指数运算

指数运算这里不做赘述

2.2 对字典变量进行解包

>>> def fun(data1, data2, data3):
...     print("data1: ", data1)
...     print("data2: ", data2)
...     print("data3: ", data3)

>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
>>> fun(**kwargs)
data1:  3
data2:  2
data3:  one

通过上述例子可知,**kwargskwargs变量拆分成了三个子元素并作为三个实参以关键字的形式传递给了fun函数

2.3 带*前缀的函数形参能够接受任意个关键字参数

>>> def two(a=1,**kwargs):
     	print(b)
>>> two(a=1,b=2,c=3,d=4,e=5,f=6)
{'b': 2, 'c': 3, 'e': 5, 'f': 6, 'd': 4}

通过上述例子可知,**kwargs接受了a=1后的所有关键字,并将关键字转化成了字典的形式

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

energy_百分百

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值