元组
“记录”的概念
元组可以作为“没有字段名的记录”。所谓记录,即元组内每个元素代表的意义是不一样的,但整个元组构成一个完整的记录。如:
(张向松,27,男,116,171)#(name, age, gender, weight, height)
(中国,北京,15亿,东八区)#(country, capital, population, time_zone)
元组作为这种记录使用是很合适的,不要只把其当为“不可变列表”
元组拆包
鉴于元组作为记录使用,其拆包是必要的。举例来说,某一次考察时,我们可能只想考察姓名和年龄,而不关心其它方面,那有必要在每个元组里有效提取出这两个元素,这就是拆包。
拆包的硬性要求:用于接受这些元素的变量数必须跟元组内元素数量相等。
1)基本形式:分别赋给各个变量
2)使用%
3)使用占位符“_”
有些信息我们用不到,为了语法正确性,使用占位符。注意并没有一个变量叫“_”
4)使用*接受不确定数量的参数
其中不确定参量始终以list形式存储.
*rest可以放在任何位置,由解释器自己匹配
5)嵌套元组拆包
有些元组是嵌套式的,拆包表达式要与嵌套结构相对应,解释器就可以正确拆解。
也可以这样:
- 具名元组
元组作为记录时,每个字段往往有名字,如分别叫国家、首都、人口、时区、经纬度。但普通元组并未体现这一点。而具名元组则实现了这一点。
collections.namedtuple是一个工厂函数,用于构建带字段名的元组(通过构建一个带名字的类)
1)一个类属性_fields。可以得到该具名元组的所有元素名
2)一个类方法_make
在创建一个namedtuple实例时,存放在各个字段里的数据只能以“一串参数”的形式传入。如果是传入一个已构造好的可迭代对象,需要使用_make方法
3)一个实例方法_asdict:把一个具名元组转换为一个ordered_dict
- 元组作为不可变列表