当前位置:脚本大全 > > 正文

python序列定义(详解Python3序列赋值、序列解包)

时间:2021-09-30 00:19:07类别:脚本大全

python序列定义

详解Python3序列赋值、序列解包

上节我们提到解决赋值中等号两边参数不一致的方法可以通过切片,但在python3中我们可以利用特定的语法更加方便的处理这种情况,如下示例。

当带 * 出现在结尾间时

  • ?
  • 1
  • 2
  • 3
  • l = [1, 2, 3, 4, 5]
  • a, *b = l
  • print(a, b)
  • 示例结果:

    1 [2, 3, 4, 5]

    我们可以看到a匹配了列表中第一个元素值,而b匹配了后面所有的内容,并且为列表。即当我们利用带 * 符号匹配时,就可以解决赋值时等号两边元素数量不相等的情形,那么这种带 * 的处理方式都有哪些详细的使用场景和用法呢?

    当带 * 出现在中间时

  • ?
  • 1
  • 2
  • 3
  • l = [1, 2, 3, 4, 5]
  • a, *b, c = l
  • print(a, b, c)
  • 示例结果:

    1 [2, 3, 4] 5

    即a和c获取了开头和结尾的元素值,而中间所有的元素值都是赋值给了b

    当带 * 出现在开头时

  • ?
  • 1
  • 2
  • 3
  • l = [1, 2, 3, 4, 5]
  • *a, b = l
  • print(a, b)
  • 即b获取了列表结尾的元素值,而开头到末尾但不包含末尾的所有元素值赋值给了a

    通用化

    类似序列赋值,扩展的序列解法的用法也可以扩展到任何序列类型,比如元组,字符串:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • s = 'python'
  • a,b,*c = s
  • print(a,b,c)
  • a,b,*c = list(s)
  • print(a,b,c)
  • 示例结果

  • ?
  • 1
  • 2
  • p y ['t', 'h', 'o', 'n']
  • p y ['t', 'h', 'o', 'n']
  • 即我们可以看到字符串的结果和处理列表非常相似,即和对 list(s) 进行扩展序列解包的结果一致。

    一些边界情况

    在使用扩展序列解包语法,我们也可能遇到一些极端的情况,比如没有剩下的内容用于匹配带 * 的项,此时该项会被赋值为空列表 [] 。

  • ?
  • 1
  • 2
  • 3
  • l = [1, 2, 3, 4]
  • a, b, c, d, *e = l
  • 1 2 3 4 []
  • 而如果在赋值时出现带多个 * 项,或者只有带 * 的项都会引发错误:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 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序列赋值、序列解包,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!

    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    原文链接:https://juejin.im/post/5cd97dfa6fb9a03202223a1c

    上一篇下一篇

    猜您喜欢

    热门推荐