简单讲解Python编程中namedtuple类的用法


Posted in Python onJune 21, 2016

Python的Collections模块提供了不少好用的数据容器类型,其中一个精品当属namedtuple。

namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,更能够方便的通过属性名来访问数据。

在python中,传统的tuple类似于数组,只能通过下标来访问各个元素,我们还需要注释每个下标代表什么数据。通过使用namedtuple,每个元素有了自己的名字,类似于C语言中的struct,这样数据的意义就可以一目了然了。当然,声明namedtuple是非常简单方便的。
代码示例如下:

from collections import namedtuple
 
Friend=namedtuple("Friend",['name','age','email'])
 
f1=Friend('xiaowang',33,'xiaowang@163.com')
print(f1)
print(f1.age)
print(f1.email)
f2=Friend(name='xiaozhang',email='xiaozhang@sina.com',age=30)
print(f2)
 
name,age,email=f2
print(name,age,email)

类似于tuple,它的属性也是不可变的:

>>> big_yellow.age += 1
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: can't set attribute

能够方便的转换成OrderedDict:

>>> big_yellow._asdict()
OrderedDict([('name', 'big_yellow'), ('age', 3), ('type', 'dog')])

方法返回多个值得时候,其实更好的是返回namedtuple的结果,这样程序的逻辑会更加的清晰和好维护:

>>> from collections import namedtuple
>>> def get_name():
...   name = namedtuple("name", ["first", "middle", "last"])
...   return name("John", "You know nothing", "Snow")
...
>>> name = get_name()
>>> print name.first, name.middle, name.last
John You know nothing Snow

相比tuple,dictionary,namedtuple略微有点综合体的意味:直观、使用方便,墙裂建议大家在合适的时候多用用namedtuple。

Python 相关文章推荐
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
python简单实现基数排序算法
May 16 Python
使用python实现个性化词云的方法
Jun 16 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
python绘制汉诺塔
Mar 01 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 Python
Python编程中实现迭代器的一些技巧小结
Jun 21 #Python
Centos Python2 升级到Python3的简单实现
Jun 21 #Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 #Python
Python正则表达式使用经典实例
Jun 21 #Python
常见的python正则用法实例讲解
Jun 21 #Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 #Python
Python中的数学运算操作符使用进阶
Jun 20 #Python
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
js使用递归解析xml
2014/12/12 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
Python实现类继承实例
2014/07/04 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
python 通过文件夹导入包的操作
2020/06/01 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
应用数学自荐书范文
2013/11/24 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
森林防火宣传标语
2014/06/27 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
辞职信标准格式
2015/02/27 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
Python数据处理的三个实用技巧分享
2022/04/01 Python
Elasticsearch 基本查询和组合查询
2022/04/19 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers