案例:
学生信息系统中数据为固定格式:{名字,年龄,性别,邮箱.....}
(元组优势:存储空间小,访问速度快)
学生数量很大为了减小存储开销,对每个学生信息用元组表示:
('jim',16,'male','jim@qq.com')
('lilei',18,'male','lilei@qq.com')
('lucy',17,'female','lucy@qq.com')
但是我们使用索引访问,大量使用索引降低了程序的可读性,如何解决这个问题
方案一:定义类似其他语言的枚举类型,也就是定义一系列数值常量
方案二:使用标准库中的collections.namedtuple代替内置tuple
from collections import namedtuple
student = ('jim',16,'male','jim@qq.com')
print(student[0],student[2])
# 方案一
NAME, AGE, sex, EMAIL = range(4)
print(student[NAME],student[EMAIL])
# 方案二
# namedtuple返回一个内置元组的子类,
# 第一个参数是新创建子类的类名,第二个参数是一系列名字,对应每个索引的名字
# 相当于一个类的工厂
# 开销仅比内置元组大一点
Student = namedtuple('Student',('name', 'age', 'sex', 'email'))
s1 = Student('jim',16,'male','jim@qq.com')
s2 = Student(name='lilei',age=18,sex='male',email='lilei@qq.com')
print(s1.email)
print(s2.name)
print(isinstance(s1,tuple))