昨天有个Python初学者问了一个问题:
1 | def test(a, b, c): pass |
这里用到了一个解包的概念,可以直接使用test(*(1, 2, 3))
。
解包可迭代对象
在Python中,可迭代对象都可以解包,如str、list、tuple、set、生成器、迭代器…
1 | "Hello world!" # 解包str a0, a1, *args, a_1 = |
解包dict
正常情况下,dict也是可以迭代的,只不过只能迭代key值,不能迭代value, 也就是说,dict是可以正常解包的。由于dict是无序的,解包也是无序的。
1 | 'a': 1, 'b': 2, 'c': 3} a, b, c = { |
函数调用中的解包操作
普通解包,可以在前面添加一个*
号:
1 | 1, 2, 3]) # 解包list print(*[ |
dict解包还可以用于关键字参数上,在前面添加两个*
号,如:
1 | def test(a=1, b=2, c=3): |
在Python3.5之后,Python还支持同时对多个值进行解包:
1 | 1, 2), *[3], *'Hello world!') print(*( |
也可以将解包用在表达式中:
1 | 3), *[3] *range( |