拆包装包和不定长参数
拆包装包:
首先介绍一下装包和拆包的概念
装包:由n-->1 把未命名的参数放到元组中,把命名的参数放到字典中
拆包:由1-->n 把【元组/列表/字典/集合】拆包成多个数据 拆包可结合*使用,表示还原最初传进来的数据样貌
1、装包(变成元组)
group=100,[1,2,3],'tom',('a','b')
print(group)#(100, [1, 2, 3], 'tom', ('a', 'b'))
print(type(group))#<class 'tuple'>
2、不带*的拆包(将一个序列类型数据拆成多个数据) ,此时需注意序列的元素个数必须等于变量个数
list1=[1,2,'tom']
a,b,c=list1
print(a)#1
print(b)#2
print(c)#tom
print(list1)#[1, 2, 'tom']
dict1={'1':'a','2':'b','3':'c'}
a,b,c=dict1
print(a)#1
print(b)#2
print(c)#3
print(dict1)#{'1': 'a', '2': 'b', '3': 'c'}
3、带*的拆包(将一个序列类型数据拆成多个数据) ,此时需注意序列的元素个数必须多于变量个数
list1=[1,2,3,'tom']
a,b,*c=list1
print(a)#1
print(b)#2
print(*c)#3 tom
print(c)#[3, 'tom']
dict1={'1':'a','2':'b','3':'c','4':'d'}
a,b,*c=dict1
print(a)#1
print(b)#2
print(*c)#3 4
print(c)#['3', '4']
不定长参数:
python自定义函数中有两种不定长参数:第一种是*args,第二种是**kwargs。
*args作为形参是用来接收多余的未命名的参数,以元组的形式传入;
**kwargs作为形参是用来接收key=value这种命名参数,以字典的形式传入。
*args:
def funA(a, b, *args):
print(a)
print(b)
print(*args)
print(args)
funA(1, 2, 3, 5, 6, 7)
>>>
1
2
3 5 6 7
(3, 5, 6, 7)
可以看出,1和2这前两个实参传给了a和b,而剩下的3,5,6,7四个实参都以元组的形式存在了args这个参数中,所以在第四行输出的是个元组
def funB(a, b, **kwargs):
print(a)
print(b)
print(kwargs)
print(kwargs['l'])
funB(1, 2, l=3, m=4)
>>>
1
2
{'l': 3, 'm': 4}
3
可以看出,1和2这前两个实参传给了a和b,而 l 和 m 这两个实参被以字典的形式存在的kwargs中,所以第3行输出的是一个字典

浙公网安备 33010602011771号