简单讲解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 相关文章推荐
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
浅谈flask源码之请求过程
Jul 26 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
python中必要的名词解释
Nov 20 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
Python实现爬取并分析电商评论
Jun 19 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 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
模拟flock实现文件锁定
2007/02/14 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
2016/03/15 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
JSON 数据格式介绍
2012/01/13 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
Ionic2开发环境搭建教程
2020/08/20 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
从零学Python之hello world
2014/05/21 Python
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
小学教师的个人自我鉴定
2013/10/26 职场文书
会计电算化应届生自荐信
2014/02/25 职场文书
教师业务学习材料
2014/12/16 职场文书
2015年新农合工作总结
2015/03/30 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
Python中的xlrd模块使用整理
2021/06/15 Python
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
python数字类型和占位符详情
2022/03/13 Python