简单讲解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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
Python-基础-入门 简介
Aug 09 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
Python3实现的简单验证码识别功能示例
May 02 Python
pandas 空数据处理方法详解
Nov 02 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
详解python itertools功能
Feb 07 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
python list的index()和find()的实现
Nov 16 Python
TensorFlow的环境配置与安装方法
Feb 20 Python
python开发飞机大战游戏
Jul 15 Python
python 镜像环境搭建总结
Sep 23 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
php中文字母数字验证码实现代码
2008/04/25 PHP
PHP.vs.JAVA
2016/04/29 PHP
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
Vue封装的组件全局注册并引用
2019/07/24 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
Python中DJANGO简单测试实例
2015/05/11 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
利用Python批量生成任意尺寸的图片
2016/08/29 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
python简单的三元一次方程求解实例
2020/04/02 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
大学校庆邀请函
2014/01/11 职场文书
毕业实习评语
2014/02/10 职场文书
教师专业自荐书范文
2014/02/10 职场文书
法人委托书范本
2014/04/04 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
社会工作专业自荐信
2014/09/26 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
高中历史教学反思
2016/02/19 职场文书