命名元组
collections.namedtuple(typename, field_names)
命名元组(namedtuple)是元组(tuple)的子类。既可以通过名称访问(使用**.** name),又可以通过位置访问([offset])。
参数field_names既可以是用空格或者逗号分隔域名的字符串,比如‘x y’或者‘x,y’,又可以是字符串列表,比如[‘x’,‘y’]。要注意的是域名不能以下划线“_”开头,也不能是Python保留的关键字。另外域名称不可以出现同名。
from collections import namedtuple
#建立一个Student命名元组,属性有姓名sname,语文成绩cscore,数学成绩mscore,英语成绩escore
Student = namedtuple('Student','sname, cscore, mscore, escore')
#分别记录Tom,Jack和Rose的成绩
Tom = Student('Tom', 90, 100, 80)
Jack = Student('Jack', 86, 95, 100)
Rose = Student('Rose', 85, 98, 87)
print('Student one:',Tom)
print("Jack's cscore:",Jack.cscore)
print("Rose's escore:",Rose[3])
运行结果如下图所示:
命名元组比类和字典占用的空间要小,又比列表开销的时间少。而且因为是元组的子类,它同样是不可变的。如果替换其中某些域的值时,会生成新的命名元组。
#新增Helen的信息
Helen = Jack._replace(sname = 'Helen')
print("Helen's info:",Helen)
运行结果如下: