python中的*与**用法

在Python中经常会见到以下一些用法,如在函数调用中fun1(*vars)|fun2(**vars),以及在函数定义中如def fun1(*param) or def fun2(**param)这些形式。下面就针对这些情况使用具体例子进行一下说明。

对于函数调用中的***

主要功能是一个函数解压传入的过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#demo1 * list
demo_list = [1,2,3]
def demo1(a,b,c):
print('a+b+c=' + str(a+b+c))
#列表前面加星号作用是将列表解开成两个独立的参数,传入函数
demo1(*demo_list)
#a+b+c=6
#demo2 ** dict
demo_dict = {
'k1':{'v1':1},
'k2':{'v2':2},
'k3':{'v3':3}
}
def demo2(k1,k2,k3):
print(k1,k2,k3)
#字典前面加两个星号,是将字典解开成独立的元素作为形参
#补充:当将字典传入形参时,形参的名称要与字典的键名称相同
demo2(**demo_dict)
#{'v1': 1} {'v2': 2} {'v3': 3}

对于函数定义中的***

主要功能是将任意个数的参数导入到python函数中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def foo(param1, *param2):
#将所以参数以元组(tuple)的形式导入
print(param1)
print(param2)
def bar(param1, **param2):
#将参数以字典的形式导入
print(param1)
print(param2)
def foo_bar(param1,*param2,**param3):
#上面两个可以混合使用
print(param1)
print(param2)
print(param3)
foo(1,2,3)
#1
#(2, 3)
bar(1,a=2,b=3)
#1
#{'a': 2, 'b': 3}
foo_bar(1,2,3,a=4,b=5)
#1
#(2, 3)
#{'a': 4, 'b': 5}

扩展

知乎的一篇文章