案例:
學(xué)生信息系統(tǒng)中數(shù)據(jù)為固定格式:{名字瘩蚪,年齡,性別稿黍,郵箱.....}
(元組優(yōu)勢(shì):存儲(chǔ)空間小疹瘦,訪問(wèn)速度快)
學(xué)生數(shù)量很大為了減小存儲(chǔ)開(kāi)銷,對(duì)每個(gè)學(xué)生信息用元組表示:
('jim',16,'male','jim@qq.com')
('lilei',18,'male','lilei@qq.com')
('lucy',17,'female','lucy@qq.com')
但是我們使用索引訪問(wèn)巡球,大量使用索引降低了程序的可讀性言沐,如何解決這個(gè)問(wèn)題
方案一:定義類似其他語(yǔ)言的枚舉類型,也就是定義一系列數(shù)值常量
方案二:使用標(biāo)準(zhǔn)庫(kù)中的collections.namedtuple代替內(nèi)置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返回一個(gè)內(nèi)置元組的子類酣栈,
# 第一個(gè)參數(shù)是新創(chuàng)建子類的類名险胰,第二個(gè)參數(shù)是一系列名字,對(duì)應(yīng)每個(gè)索引的名字
# 相當(dāng)于一個(gè)類的工廠
# 開(kāi)銷僅比內(nèi)置元組大一點(diǎn)
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))