星形解压序列类型(或iterable可迭代对象类型)总结

一般应用

对于常见的集合类型,如tuple,list,string,files或任何可迭代对象(iterable,iterator,generator等),通常会碰到需要提取集合类型中的一系列元素或单个元素(item)的需求。Python提供了解压集合类型的操作。
通常,在函数中定义返回值时,我们通常可以这么写:return x, y,这种写法其是返回了一个tuple。
那么,比如我们有一个list,data = ['ACME', 50, 91.1, (2012, 12, 21)]。我们可以按照list中各个子item的含义一起解压成各个单独的变量便于其后的操作。
name, shares, price, date = data
注意: 解压集合类型时,赋值表达式左边的变量个数必须与集合类型中元素的个数一致。

丢弃特定迭代对象中的元素

有时候并不是所有的元素都会在接下来的操作中用到,Python提供了特殊的语法来丢弃特定元素:

data = ['ACME', 50, 91.1, (2012, 12, 21)]
_, shares, price, _ = data

星形解压任意长度可迭代对象

需求:若可迭代对象元素太多,按照一般的写法,需要写数量众多的元素变量。Python提供了一种星形表达式的语法。如下:

record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
name, email, *phone_numbers = record

星形表达式可以解压任意数量的元素,作为一个单独的list保存。值得注意的是,无论有多少电话号码被解包(包括没有电话号码),phone_numbers变量将始终是一个列表。 因此,任何使用phone_numbers的代码都不必考虑它可能不是列表或执行任何类型的附加类型检查的可能性。

星形表达式同样可以用于任意变量集合的丢弃,如:

record = ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = record
posted @ 2019-07-26 17:09  Jeffrey_Yang  阅读(176)  评论(0编辑  收藏  举报