元组解包说明(扩展其他类型解包操作)

元组解包

def f():
    return 1, 2, 3
x, y, z=f()
print(x,y,z)

打印结果

1 2 3

稍复杂

a, b, *c = (1, 2, 3, 4, 5, 6)

print(a)
print(b)
print(c)

*c的意思是将元组中剩余元素全部分配给c,且为列表形式。
结果为

1
2
[3, 4, 5, 6]

注:
若c后添加一个d,则把元组中最后一个元素分配给d,中间的剩余元素分配给*c。

解包时只能有一个*变量,若有两个则会报错。

扩展一

不仅元组可以解包,所有可迭代类型都可以解包。

例如字符串

a, b, *c,d = '123456'

print(a)
print(type(a))
print(b)
print(c)
print(d)

这里我特别打印了一下输出变量的类型
输出结果为

1
<class 'str'>
2
['3', '4', '5']
6

结果显示,a变量输出为1,但并不是整型的而是字符串类型,b、d同理,多元素输出的变量c为列表类型。
同样的还有range()

这里特别说一下字典,举个例子

a, *b = {'a': 1, 'b': 2, 'c': 3}

print(a)
print(type(a))
print(b)

输出结果为

a
<class 'str'>
['b', 'c']

不难看出,字典直接解包是对key进行解包,若需要对字典的值(values)进行解包则需在字典后加 .values()

a, *b = {'a': 1, 'b': 2, 'c': 3}.values()

结果

1
<class 'int'>
[2, 3]

若需对键、值同时解包则加 .items()

a, *b = {'a': 1, 'b': 2, 'c': 3}.items()

结果为

('a', 1)
<class 'tuple'>
[('b', 2), ('c', 3)]

输出的单元素变量为元组类型。

扩展二

调用函数时传递参数的形式也叫元组解包

def f(a, b, c):
    print(a, b, c, sep='-')
    
l=[1,2,3]
f(l[0],l[1],l[2])  #f(*l)

这里通过调用列表每个元素的下表传递参数,也可以直接用 *l 传参(需要注意列表元素数量与函数需要传递参数的数量一致,否则会报错)

1-2-3

可以通过设置可变参数args解决上述问题

def f(*args):
    print(args)

l = [1, 2, 3, 4, 5, 6, 7]
f(*l)
# 打印结果
(1, 2, 3, 4, 5, 6, 7)

利用kwargs可变关键词参数解包字典

def f(**kwargs):
    print(kwargs)

l = {'a':1,'b':2}
f(**l) #传递字典中的参数值需要注意是 **l

输出结果

{'a': 1, 'b': 2}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页