python 序列解包小记

最近翻了翻以前的python课本,感觉以前的笔记好青涩,哎,时间过得好快。不翻不知道,一翻吓一跳,里面还有好多知识点不会的,要补一补了。

序列解包

序列解包是对多个变量同时进行赋值的简洁形式,也就是把一个序列或可迭代对象中的多个元素的值同时赋值给多个变量,要求等号左侧变量的数量和等号右侧值的数量必须一致

形式1

>>> a,b,c = 1,2,3  # 多个变量同时赋值
>>> a,b = b,a  # 交换两个变量的值
>>> t = 4,5,6  # 右侧出现多个变量时,默认打包成元组
>>> type(t)
<class 'tuple'>
>>> q,w,e = t  # 解包
>>> print(a,b,c,q,w,e)
2 1 3 4 5 6
>>> a,b,c = range(3) # 可对range对象解包
>>> a,b,c = map(str,"a handsome boy".split())  # 也可对map对象解包
>>> a
'a'
>>> b
'handsome'
>>> c
'boy'
>>> dic = {
    
    1:2,3:4,5:6}
>>> for i,j in dic.items(): # 还支持字典,列表,enumerate对象等
	print(i,j)
>>> t
(4, 5, 6)
>>> print(*t) # 使用*解包
4 5 6

形式2

我们知道函数参数是有两个不定长参数需要用到*号(忘了可以点击这里回顾),在实参传递时也有 * 和 ** 号两种形式,调用含有多个位置参数的函数时,可以使用python列表,元组,集合,字典以及其他可迭代对象作为实参,并在实参名称前加上星号(如果你想一个一个的传递就用一个星号,两个两个的传递就用两个星号。)

>>> def func(a,b,c):
		print(a,b,c)
>>> a = (1,2,3)
>>> func(*a)  # 1 2 3
>>> a = "a handsome boy".split()
>>> func(*a)  # a handsome boy
>>> dic = {
    
    "a":56,"c":42,"b":2}
>>> func(*dic) # a c b 单星号表示一个一个的解包,那么默认会对字典的键解包
>>> func(**dic) # 56 2 42 两个星号表示一对对解包,会匹配对应的元素
>>> dic = {
    
    "a":56,"c":42,"b":2,"d":5}
>>> func(*dic)  # 多一个键少一个键都会报错
Traceback (most recent call last):
  File "<pyshell#47>", line 1, in <module>
    func(*dic)

猜你喜欢

转载自blog.csdn.net/lishuaigell/article/details/124154861