如何在元组中的每个元素命名,提高程序可读性

实际案例

学生信息系统中数据为固定格式:(名字,年龄,性别,邮箱地址,...)

如:学生数量很大为了减小存储开销,对每个学生信息用元组表示:
('Jim', 16, 'male', 'jim@gmail.com')
('Li', 17, 'male', 'li@163.com')
('Lucy', 16, 'female', 'lucy@qq.com')
...

通常我们采用索引的方式访问元组,具体操作如下:

# -*- coding: utf-8 -*-

student = ('Jim', 16, 'male', 'jim@gmail.com')

# 打印学生姓名
print student[0]

# 学生年龄
if student[1] >= 18:
    pass

# 学生性别
if student[2] == 'male':
    pass

这种方式虽然简单且能获取我们想要的数据,但你有没有注意到在代码中我们使用3个索引,若我们不看注释,就要看元组每一个元素所代表的信息了,这样我们代码的可读性就很低了。那有什么办法来解决这个问题呢?这时我们不妨回想一下我们大多数人在大学中学习的第一门编程语言—— C语言,我们通常在C语言中进行如下操作:

# 第一种方式——宏定义
#define NAME 0
#define AGE 1
#define SEX 2
#define EMAIL 3

# 第二种方式——枚举类型
enum Student {
    NAME,
    AGE,
    SEX,
    EMAIL,
}

因此,我们可以使用类似C语言中的枚举类型的方式访问元组,具体操作如下:

# -*- coding: utf-8 -*-

NAME = 0
AGE = 1
SEX = 2
EMAIL = 3

student = ('Jim', 16, 'male', 'jim@gmail.com')

# 打印学生姓名
print student[NAME]

# 学生年龄
if student[AGE] >= 18:
    pass

# 学生性别
if student[SEX] == 'male':
    pass

这样一看,我们就知道各处索引是获取元组内什么信息了,代码的可读性是不是变高了呢?让我们继续再看看我们刚刚的代码,有没有发现给NAME、AGE、SXE和EMAIL这几个变量赋值有点繁琐了呢?因此,我们可将其赋值代码进行如下转换:
NAME, AGE, SEX, EMAIL = xrange(4)
那我们再思考一下,还有没有方法既然提高程序的可读性又能获取我们的元组呢?当然是有的,我们可以使用Python标准库中collections.namedtuple替代内置的tuple,其中namedtuple函数的具体用法可查看Python官方文档,这里我们将利用namedtuple函数进行如下操作:

# -*- coding: utf-8 -*-

from collections import namedtuple

Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])

s = Student('Jim', 16, 'male', 'jim@gmail.com')

print s.name, s.age, s.sex, s.email

其输出结果如下:
Jim 16 male jim@gmail.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 问题 大量使用索引,无法确切辨识内容 C语言解决方法1, 使用宏定义2, 使用枚举类型 解决办法 1, 定义常量 ...
    lupinwu阅读 254评论 0 0
  • 昨天看了树丰的一篇文章,讲自己参加一个培训以及在培训中得到了一个非常有用的表格。那个表格设计还不错,但是仔细一看,...
    赛北熊在重庆阅读 208评论 0 0
  • 看完《我梦中的风月江南》,分享最美的文字,最能打动心尖美景的画面给大家。 从前慢,一切故事都被隐在了江南烟雨中; ...
    LLLL小姐阅读 228评论 1 1
  • 实在对不住自己啊,刚看到网上有喜欢和讨厌台湾的事情,才想起来,自己也是一样,那就趁着记忆,卸下来、 公交车两段式收...
    法雲阅读 1,009评论 0 0