在程序中有些数据为固定格式时,即字段数量确定、字段位置顺序确定不变,我们就可以用元组来储存。使用元组的优势是储存空间很小,访问速度也很快。如下代码对每个学生信息用元组来表示:

 # ('Jim', 16, 'male', 'jim8726@gmail.com')
# ('LiLei', 17, 'male', 'lilei8928@qq.com')
# ('Lucy', 16, 'female', 'lucy123@yahoo.com') student = ('Jim', 16, 'male', 'jim8726@gmail.com')
# name
print(student[0])
# age
if student[1] >= 18:
pass
# sex
if student[2] == 'male':
pass

程序中使用了0、1、2的索引值来访问字段,这些数字无法明确地表达该字段所代表的含义,对程序的后期维护和修改是非常不利的。那我们能不能像C语言中一样,用名字来明确表达该字段的含义,如:

 enum Student{
NAME,
AGE,
SEX,
EMAIL
}

在python中没有真正意义上的枚举类型,我们可以通过其它方法来实现,具体解决方案有二:

方案一:定义类似于其它语言的枚举类型,也就是定义一系列数值常量

 student = ('Jim', 16, 'male', 'jim8726@gmail.com')
NAME, AGE, SEX, EMAIL = range(4) # 将0,1,2,3分别赋给变量
print(student[NAME]) # 访问姓名字段
if student[AGE] >= 18: # 访问年龄字段
...
if student[SEX] == 'male': # 访问性别字段
...
print(student[EMAIL]) # 访问Email字段

方案二:使用标准库中的collections.namedtuple替代内置tuple

 1 from collections import namedtuple
# namedtuple 相当于类工厂,它的第一个参数是类的名称,
# 第二个参数是一个属性列表,相当于元组的字段
Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
# 实例化一个类对象
st = Student('Jim', 16, 'male', 'jim8928@gmail.com')
# 不再通过索引来访问元组的字段,而是通过元组对象的属性来访问各个字段
print(st.name)
print(st.age)
print(st.sex)
print(st.email)

上面的 Student 类是内置 tuple 类的子类,对象 st 是它的一个实例,在程序中的开销仅比内置 tuple 稍大一些。

python 学习笔记(二):为元组的每个元素命名,提高程序的可读性的更多相关文章

  1. python学习笔记(二)、字符串操作

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...

  2. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  3. Python学习笔记二

    ---恢复内容开始--- 一. python几种数据类型的比较. 从以下几个方面比较: 1. 是否可变. 不可变类型:变量的值可以发生变化,id也变了,相当于创建了一个新的对象,所以一修改值,id就变 ...

  4. Python学习笔记----列表、元组和字典的基础操作

    文章目录 一.列表的基本操作 1.1 修改列表中的某个数据 1.2 获取某个元素的返回值(返回的是索引) 1.3 在列表中插入新的元素 1.4 删除列表中的元素 1.5 +和* 二.内置的函数和方法 ...

  5. python学习笔记二 数据类型(基础篇)

    Python基础 对于Python,一切事物都是对象,对象基于类创建         不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上 ...

  6. (10.1)Python学习笔记二

    1.在项目工程中要模块化测试一个开发的功能,在测试通过后交付给项目组其他人员继续开发.要保证代码开发的性能和效率以及可扩展性. 2.项目工程中的文件夹分类要功能模块明确清晰,在python中引入某一个 ...

  7. python学习笔记(二)---for循环与操作列表

    内容概要 for循环 range(start,end,step)函数 生成随机数列表 list()函数 将range()的结果整合到某个列表 列表的操作 切片(start: end :step) 元组 ...

  8. python学习笔记5(元组)

    一.元组特性 1.类似列表,但不可变类型,正因如此,它可以做一个字典的key2.当处理一组对象时,这个组默认是元组类型3.所有的多对象,逗号分隔的,没有明确用符号定义的这些都默认为元组类型 >& ...

  9. Python 学习笔记6 变量-元组

    我们在上一篇中了解了变量list(列表), 今天我们来介绍下元组.元组是由括号和逗号,组织起来的一个元素的集合.和list不同的是,它其中的元素是不能被修改的,和其他语言中的常量相类似. 需要注意的是 ...

  10. 如何为元组中的每个元素命名,提高程序可读性---Python数据结构与算法相关问题与解决技巧

    实际案例: 学生信息系统中,数据为固定格式:(名字,年龄,性别,邮箱) ,通常使用元组来存储 使用优点: 使用元组最大的优点在于节省空间,存储相同的数据,使用元组比使用字典,空间小很多 使用缺点: 访 ...

随机推荐

  1. 并发编程:生产消费模型、死锁与Rlock、线程、守护线程、信号量、锁

    一.生产者消费者模型1 二.生产者消费者模型2 三.守护线程 四.常用方法 五.启动线程的另一种方式 六.锁 七.锁死 八.死锁 九.单个锁能不能死锁 十.信号旗 一.生产者消费者模型1 import ...

  2. Linux CentOS 7 防火墙与端口设置操作

    CentOS升级到7之后用firewall代替了iptables来设置Linux端口, 下面是具体的设置方法: []:选填 <>:必填 [<zone>]:作用域(block.d ...

  3. Centos7下rc.local文件开机不执行…

    在Centos7下,rc.local文件,开机默认是不执行的 /etc/rc.local链接的是  /etc/rc.d/rc.local文件,该文件默认不开机启动,官方建议添加一个service来实现 ...

  4. 深圳即将启动首届「全国人工智能大赛」:超过 500 万大奖 & 政府资助,潜信息你读懂了吗!

    人工智能加速“视频/视觉”发展,近期,深圳市即将迎来人工智能领域权威赛事之一——首届「全国人工智能大赛」(The First National Artificial Intelligence Chal ...

  5. unique() sstream

    sstream ss()自动去除空格 例: string a="1 2 3 4 5; getline(cin,a); sstream ss(a); while(ss>>b) { ...

  6. QT容器类

    QList<T> 是一个指针数组,可以使用下标 append(), prepend(), insert() QList<QString> list; list<<& ...

  7. 运维堡垒机(跳板机)系统 python

    相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. A ...

  8. JAVA解压ZIP文件

    import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...

  9. Newnode's NOI(P?)模拟赛 第二题 dp决策单调优化

    其实直接暴力O(n3)DP+O2O(n^3)DP+O_2O(n3)DP+O2​优化能过- CODE O(n3)O(n^3)O(n3) 先来个O(n3)O(n^3)O(n3)暴力DP(开了O2O_2O2 ...

  10. BZOJ 2219 数论之神 (CRT推论+BSGS+原根指标)

    看了Po神的题解一下子就懂了A了! 不过Po神的代码出锅了-solve中"d-temp"并没有什么用QwQQwQQwQ-应该把模数除以p^temp次方才行. 来自BZOJ讨论板的h ...