1.原因:
當存儲一個學生資訊的時候使用字典是十分友善的,例如下面這樣:
student = {
'name' : "小明",
'sex' : 'Man',
'tel' : '123456',
'score' : 100,
'address' : 'xxxx'
}
因為這樣可以很直覺的顯示出一個學生的各個資訊,但是當有很多學生的時候使用元組是不是可以更簡單呢?我們隻需要将所有的元組元素使用相同的排列方式,例如:
s1 = ('小明', 'Man', '123456', 100, 'xxxx')
第一個元素表示名字,第二個元素表示性别,第三個元素表示電話号碼,第四個元素表示分數,第五個元素表示位址.最重要的是在存儲的時候元組占用的存儲空間比字典少.是以當有大量資料的時候使用元組會節省大量的空間.
但是這樣的話就會出現一個問題:在通路元組屬性上的時候我們使用類似于s1[0],s1[2]……這些我們自己知道表示的是姓名和電話号碼,但是其他閱讀你代碼的人知道嗎?是以我們可以給元組的元素命名,這樣的話就能十分直覺的讓閱讀代碼的人知道我們調用的是哪一個“屬性”.
2.方法一:使用collections.namedtuple代替内置的tuple
話不多說,我們直接上代碼:
'''
!
'''
# 導入namedtuple
from collections import namedtuple
# 建立一個學生“類”,名字叫student
student = namedtuple('stduent', ['name', 'sex', 'tel', 'score', 'address'])
# 建立一個namedtuple對象
s = student('小明', 'Man', '123456', 100, 'xxxx')
# 檢視建立的對象
print(s)
# 判斷對象的類型是不是tuple
print(isinstance(s, tuple))
# 嘗試使用字典的方式調用對象屬性
print(s.name)
print(s.sex)
print(s.tel)
print(s.score)
print(s.address)
注釋:
新的通路namedtupyle元素的方式不再是以前的s[0],s[1]……而是在對象後面更屬性名(這也是為什麼我喜歡稱他們為類,對象,和屬性)
輸出結果:
stduent(name='小明', sex='Man', tel='123456', score=100, address='xxxx')
True
小明
Man
123456
100
xxxx
3.方法二:使用枚舉類型:
原本的元組可讀性差的原因在于不知道元素順序表示的含義的時候很難通過數字判斷,是以我們可以使用枚舉類型來代替原本屬性調用時候的數字.
具體請看代碼:
#導入整數枚舉
from enum import IntEnum
#建立整數枚舉類型
class st(IntEnum):
name = 0
sex = 1
tel = 2
score = 3
address = 4
s = ('小明', 'Man', '123456', 100, 'xxxx')
#元素調用
print(s[st.name], s[st.sex], s[st.address], s[st.tel], s[st.score], s[st.address])
小明 Man xxxx 123456 100 xxxx