Python 50問 [2]:如何為元組中每個元素命名

常規(guī)場景

先來看一個案例。

學生信息系統(tǒng)中數(shù)據(jù)為固定格式(姓名,年齡,性別,郵箱地址),學生數(shù)據(jù)很大為了減小存儲開銷,對每個學生我們用元組表示。但是,訪問時,我們通常使用索引(index)訪問,大量的索引降低了程序的可讀性。

# 現(xiàn)有如下的一些元組
# ('Jim', 16, 'male', 'jim@ursb.me')
# ('Airing', 20, 'male', 'airing@ursb.me')
# ('Lucy', 16, 'female', 'lucy@ursb.me')

student = ('Jim', 16, 'male', 'jim@ursb.me')

# name
print student[0]

# age
print student[1]

# sex
print student[2]

可見,程序中將會大量的出現(xiàn)一些純數(shù)字的索引值,非常不利于程序的維護,可讀性很差,一眼看不出其含義。

C 語言中的解決方案

C 語言中,可以使用宏定義的方式解決這個問題:

#define NAME 0
#define AGE  1

也可以使用枚舉類型解決:

enum Student{
    NAME,
    AGE,
    SEX,
}

Python 中優(yōu)雅的解決方案

方案1:定義類似C語言中的枚舉類型

這種方法,也就是定義一系列的數(shù)值常量


NAME  = 0
AGE   = 1
SEX   = 2
EMAIL = 3
# 或者 NAME, AGE, SEX, EMAIL = xrange(4)

student = ('Airing', 20, 'male', 'airing@ursb.me')

# name 
print student[NAME]

# age
print student[AGE]

# sexprint student[SEX]

方案2:使用標準庫中collections.namedtuple替代內(nèi)置tuple

from collections import namedtuple

# 相當于類的工廠
Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])

# 相當于實例化類對象
s = Student('Airing', 20, 'male', 'airing@ursb.me')

# 也可以使用關(guān)鍵字傳參,但是位置需要對應(yīng)
s2 = Student(name='Jim', age=16, sex='male', email='jim@ursb.me')

# 訪問元素相當于訪問對象的屬性
s.name
s.age
s.sex

# s也是內(nèi)置類型 tuple 的子類
isinstance(s, tuple)     # => True

是不是優(yōu)雅方便了許多呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 七點過,洗完澡,拖著鞋縮在我大大的椅子上戳著剛剝好的柚子,頂著濕漉漉的頭發(fā)在溫暖的空調(diào)房里等著爸媽的電話! 我認為...
    男神李二狗閱讀 275評論 0 0
  • 本來我打算這個月報考中級會計的考試的,但是因為各種自己的原因,應(yīng)該報不上了,反正我報名的目的是為了學習一些理財知識...
    胖連OnTheWay閱讀 441評論 0 0
  • 之前Sir推薦過一部短片。 講單身的真正原因: 有朋友就說,沒對象鬧心; 有對象,更鬧心。 該分手的理由,比找不到...
    Sir電影閱讀 1,498評論 1 18

友情鏈接更多精彩內(nèi)容