拆包装包和不定长参数

拆包装包:

首先介绍一下装包和拆包的概念

装包:由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行输出的是一个字典 

posted @ 2022-05-15 14:07  少年不太冷2  阅读(75)  评论(0)    收藏  举报