对于一个元组如:

>>> s1 = ('Jim', 21, 'boy', '5788236@qq.com')

我们要得到该对象的名字,年龄,性别及邮箱的方法为s1[0],s1[1],s1[2],s1[3]。那么如果程序中充斥了大量的这种没有意义的索引数字,则会影响代码的可读性。所以考虑几种方法来解决这个问题:

>>> NAME = 0
>>> AGE = 1
>>> SEX = 2
>>> EMAIL = 3
# 或者通过这样定义
>>> NAME, AGE, SEX, EMAIL = xrange(4)

则此时就可以通过s1[NAME], s1[AGE], s1[SEX], s1[EMAIL]这种见名知意的方式来获取所需值。

另外一种方法是利用collections模块中的namedtuple函数。

>>> from collections import namedtuple
>>> Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
>>> s1 = Student('Jim', 21, 'boy', '123@qq.com')
Student(name='Jim', age=21, sex='boy', email='123@qq.com')
>>> s2 = Student(name='Tom', age=22, sex='boy', email='abd@123.com')
Student(name='Tom', age=22, sex='boy', email='abd@123.com')
>>> s1.name
'Jim'
>>> s2.age
22

namedtuple函数这里接收了两个参数,第一个参数为要创建类型的名称,第二个参数是一个列表,代表了每一个索引的名字。当建立完成这个Student类之后,我们可以使用正常的构造方法来构造新的对象如s1和s2,并且可以直接通过访问属性的方法来访问所需要的值。

此时使用isinstance函数对比内置的tuple:

>>> isinstance(s1, tuple)
True

说明这个用namedtuple构造出来的类其本质就是一个tuple元组,所以仍然可以使用下标的方式来访问属性。并且在任何要求类型为元组的地方都可以使用这个namedtuple。

Python强化训练笔记(二)——元组元素的命名的更多相关文章

  1. Python强化训练笔记(五)——找出多个字典中的公共键

    在这个问题中,我们期望得到的结果是找到这三轮比赛中,每轮都进球的球员都有谁.下面用python来模拟一下,先生成一批数据: >>> from random import randin ...

  2. Python强化训练笔记(六)——让字典保持有序性

    python的字典是一个非常方便的数据结构,使用它我们可以轻易的根据姓名(键)来找到他的成绩,排名等(值),而不用去遍历整个数据集. 例如:{'Lee': [1, 100], 'Jane': [2, ...

  3. Python强化训练笔记(四)——字典的排序

    假如有学生成绩以字典顺序排列:{'Tom': 87, 'Jack': 90, 'Rose': 100.....} 想要根据学生的成绩来进行排序,可以考虑使用sorted函数.但是sorted函数用在字 ...

  4. Python强化训练笔记(三)——词频的统计

    现有列表如下: [6, 7, 5, 9, 4, 1, 8, 6, 2, 9] 希望统计各个元素出现的次数,可以看作一个词频统计的问题. 我们希望最终得到一个这样的结果:{6:2, 7:1...}即 { ...

  5. Python强化训练笔记(七)——使用deque队列以及将对象保存为文件

    collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则.我们可以利用这个对象来实现数据的保存功能. 例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0-100 ...

  6. Python强化训练笔记(一)——在列表,字典,集合中筛选数据

    列表,字典,集合中根据条件筛选数据,如下所示 列表:[-10,2,2,3,-2,7,6,9] 找出所有的非负数 字典:{1:90,2:55,3:87...} 找出所有值大于60的键值对 集合:{2,3 ...

  7. 【原】Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

    本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =.以后还是要按时完成任务.废话不多说,第四章-第六章主要讲了三个内容:键值对.数据读取与保存与Spark的两个共享特性(累加器和广播变量). ...

  8. python基础学习笔记二之列表

    1.列表 ①列表的创建: ②列表的查询(索引): ③列表的切片操作: 此处要注意到:返回索引0到3的元素,顾头不顾尾. ④列表的增加: s.append()  #直接在结尾追加 s.insert()  ...

  9. 《简明python教程》笔记二

    面向对象的编程: 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例.对象可以使用普通的属于对象的变量存储数据.属于一个对象或类的变量被称为域.对象也可以使用属于类的函数来具 ...

随机推荐

  1. PHP 传值和传引用、传地址的区别

    传值,   是把实参的值赋值给行参   那么对行参的修改,不会影响实参的值   传地址   是传值的一种特殊方式,只是他传递的是地址,不是普通的如int   那么传地址以后,实参和行参都指向同一个对象 ...

  2. sql中保留到小数点后两位以及非空判断赋值为零

    SELECT a.dzzmc, a.dzzdm, a.px, CONVERT(decimal(18, 2), ISNULL(b.sjpfzdf, 0) * 0.6 + (ISNULL(a.zddfzd ...

  3. 封装原生Ajax

    var Chef = { createAjax:function() { var xhr = null; try { //IE系列浏览器 xhr = new ActiveXObject("m ...

  4. DFS Codeforces Round #290 (Div. 2) B. Fox And Two Dots

    题目传送门 /* DFS:每个点四处寻找,判断是否与前面的颜色相同,当走到已走过的表示成一个环 */ #include <cstdio> #include <iostream> ...

  5. 把Actor绑定到角色的插槽上

    void AMonster::PostInitializeComponents(){ Super::PostInitializeComponents(); // instantiate the mel ...

  6. Git常用命令举例

    clone一个git project到本地 git clone https://github.com/huahuiyang/network-certification.git 到这个目录下,可以发现有 ...

  7. ural 1343. Fairy Tale

    1343. Fairy Tale Time limit: 1.0 secondMemory limit: 64 MB 12 months to sing and dance in a ring the ...

  8. AdaBoost 和 Real Adaboost 总结

    AdaBoost 和 Real Adaboost 总结 AdaBoost Real AdaBoost AdaBoost AdaBoost, Adaptive Boosting(自适应增强), 是一种集 ...

  9. iOS学习01C语言数据类型

    1.注释 // 单行注释 // 注释对代码起到解释说明的作用,注释是给程序员看的,不参与程序运行 /*  多行注释  Xcode快捷键  全选 cmd+a  复制 cmd+c  粘贴 cmd+v  设 ...

  10. BZOJ4117 : [Wf2015]Weather Report

    一种天气情况的概率只与4种天气的出现次数有关,故将相同概率的情况计数后放入堆中模拟哈夫曼树即可. 每次取出概率最小的,将它个数除以2,对于零头需要特判. #include<cstdio> ...