前言
当函数的参数前面有一个星号*的时候表示是一个可变的位置参数,两个星号**表示是可变的关键字参数
一、可变参数说明
可对函数传递的参数进行打包(元组tuple或字典dictionary),也能打散(分解成单个元素),其中元组的打包和解包使用单星号*,字典的打包和拆解使用双行号**
二、可变参数打包
打包,就是将传递给函数的任意多个(也可以是零个)非关键字参数/关键字参数打包成一个元组/字典(元组只能接收非关键字参数,字典只能接收关键字参数)
代码如下(示例):
def param(*args, **kwarg):
for i in args:
print(i)
for i,j in kwarg.items():
print(j, j)
print('*' * 20)
if __name__ == '__main__':
param(1, 2, a=4, b=5)
param(2, 3, a=1, b=2, c=3)
返回结果:
1
2
4 4
5 5
********************
2
3
1 1
2 2
3 3
********************
Process finished with exit code 0
二、可变参数解包
解包,就是将传递给函数的一个列表、元组或字典拆分成独立的多个元素然后赋值给函数中的参数变量(包括普通的位置参数,关键字参数,元组,字典也即**关键字参数)
代码如下(示例):
def param(*args, **kwarg):
for i in args:
print(i)
for i,j in kwarg.items():
print(j, j)
print('*' * 20)
if __name__ == '__main__':
a = (1, 2, 3)
b = [1, 16, 22]
c = {'a':11, 'b':13}
param(a, c)
param(*a, **c)
param(b, c)
param(*b, **c)
返回结果:
#说明:param(a, c) 输出a和b
(1, 2, 3)
{'a': 11, 'b': 13}
********************
#说明:param(*a, **c) 打散a和c
1
2
3
11 11
13 13
********************
#说明:param(b, c) 输出b和c
[1, 16, 22]
{'a': 11, 'b': 13}
********************
#说明:param(*b, **c) 打散b和c
1
16
22
11 11
13 13
********************