文章目录
Python中
*
的作用
- 乘法运算
- 对列表等数据结构进行解包
- 多变量赋值时获取多个元素
- 带
*
前缀的函数形参能够接受任意个非关键字参数(键值对)
Python中 **
的作用
- 指数运算
- 对字典变量进行解包
- 带
*
前缀的函数形参能够接受任意个关键字参数
光看字面上的解释可能难于理解,下边通过几个例子来具体说明
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
通过上述例子可知,*args
将args
变量拆分成了三个子元素并作为三个实参传递给了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
通过上述例子可知,**kwargs
将kwargs
变量拆分成了三个子元素并作为三个实参以关键字的形式传递给了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
后的所有关键字,并将关键字转化成了字典的形式