内容简介:上节我们提到解决赋值中等号两边参数不一致的方法可以通过切片,但在Python3中我们可以利用特定的语法更加方便的处理这种情况,如下示例。当带示例结果:
上节我们提到解决赋值中等号两边参数不一致的方法可以通过切片,但在 Python 3中我们可以利用特定的语法更加方便的处理这种情况,如下示例。
当带 *
出现在结尾间时
L = [1, 2, 3, 4, 5] a, *b = L print(a, b) 复制代码
示例结果:
1 [2, 3, 4, 5] 复制代码
我们可以看到a匹配了列表中第一个元素值,而b匹配了后面所有的内容,并且为列表。即当我们利用带 *
符号匹配时,就可以解决赋值时等号两边元素数量不相等的情形,那么这种带 *
的处理方式都有哪些详细的使用场景和用法呢?
当带 *
出现在中间时
L = [1, 2, 3, 4, 5] a, *b, c = L print(a, b, c) 复制代码
示例结果:
1 [2, 3, 4] 5 复制代码
即a和c获取了开头和结尾的元素值,而中间所有的元素值都是赋值给了b
当带 *
出现在开头时
L = [1, 2, 3, 4, 5] *a, b = L print(a, b) 复制代码
即b获取了列表结尾的元素值,而开头到末尾但不包含末尾的所有元素值赋值给了a
通用化
类似序列赋值,扩展的序列解法的用法也可以扩展到任何序列类型,比如元组,字符串:
S = 'PYTHON' a,b,*c = S print(a,b,c) a,b,*c = list(S) print(a,b,c) 复制代码
示例结果
P Y ['T', 'H', 'O', 'N'] P Y ['T', 'H', 'O', 'N'] 复制代码
即我们可以看到字符串的结果和处理列表非常相似,即和对 list(S)
进行扩展序列解包的结果一致。
一些边界情况
在使用扩展序列解包语法,我们也可能遇到一些极端的情况,比如没有剩下的内容用于匹配带 *
的项,此时该项会被赋值为空列表 []
。
L = [1, 2, 3, 4] a, b, c, d, *e = L 复制代码
1 2 3 4 [] 复制代码
而如果在赋值时出现带多个 *
项,或者只有带 *
的项都会引发错误:
L = [1, 2, 3, 4] *a, b, *c = L L = [1, 2, 3, 4] *a = L 复制代码
*a, b, *c = L ^ SyntaxError: two starred expressions in assignment *a = L ^ SyntaxError: starred assignment target must be in a list or tuple 复制代码
以上所述就是小编给大家介绍的《Python3序列赋值、序列解包详解(下)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 少说话多写代码之Python学习022——赋值语句的用户01(序列解包)
- 少说话多写代码之Python学习023——赋值语句的用户02(链式赋值、增量赋值)
- 理解Golang多重赋值
- ES6 解构赋值
- 【ES6复习】解构赋值
- 问题分享:Js引用类型赋值
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。