為元組中的每一個元素命名

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)

注釋:

  1. 新的訪問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
 
這也算是一種很直觀的方式了,還有一種更簡單粗暴的,那就是只給讓那些數字擁有意義:創建變量name = 0, sex = 1........但是我為什麼沒有講,我聰明如你只需要稍加思考就知道為啥了.
原文地址:https://www.cnblogs.com/ltozvxe/p/12420307.html