a, b, c = (1, 2, 3)# a:1 b:2 c:3
字符串解包a, b, c = "xyz"# a:x b:y c:z
字典解包字典解包后,只会把字典的key取出来,value则丢掉了。
a, b, c = {"a":1, "b":2, "c":3}# a:'a' b:'b' c:'c'
等号左右元素不等时的解包在 Python2 中,如果等号左边变量的个数不等于右边可迭代对象中元素的个数,是不允许解包的。但在 python3 可以这么做了。这个特性可以在 PEP 3132 中看到。
这种语法就是在某个变量面前加一个星号,而且这个星号可以放在任意变量,每个变量都分配一个元素后,剩下的元素都分配给这个带星号的变量。
a, b, *c = [1, 2, 3, 4]# a:1 b:2 c:[3, 4]# *号可以在任意位置a, *b, c = [1, 2, 3, 4]# a:1 b:[2, 3] c:4
函数调用时的解包元组,列表,字符串等传入函数时的解包:
def func(a, b, c): print(a, b, c)func(*[1, 2, 3])func(*(1, 2, 3))func(*"123")# 以上三条语句都等同于func(1, 2, 3)
字典会以key=value的格式解包传入函数:
func(**{"a": 1, "b": 2, "c": 3})# 等同于func(a=1, b=2, c=3)
字典的key必须和形参名保持一致,否则会报错
从python3.5开始,在函数调用中可以有任意多个解包 *** 作:
func(*(1,), *[2], **{"c": 3})
表达式中的解包*range(4), 4# (0, 1, 2, 3, 4)[*range(4), 4]# [0, 1, 2, 3, 4]{*range(4), 4}# {0, 1, 2, 3, 4}{"x": 1, "y": 2, **{"z": 3}}# {'x': 1, 'y': 2, 'z': 3}[*[1, 2, 3], *range(4, 8)]# [1, 2, 3, 4, 5, 6, 7]a = {"x": 1, "y": 2}b = {"z": 3}{**a, **b}# {'x': 1, 'y': 2, 'z': 3}
总结自动解包支持一切可迭代对象。python3中,支持更高级的解包 *** 作,用星号 *** 作使得等号左边的变量个数可以少于右边迭代对象中元素的个数。函数调用时,可以用 *
或者**
解包可迭代对象,作为参数传递。python3.5,函数调用和表达式中可支持更多的解包 *** 作。 总结 以上是内存溢出为你收集整理的Python的解包全部内容,希望文章能够帮你解决Python的解包所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)