简单讲解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 相关文章推荐
python装饰器使用方法实例
Nov 21 Python
Python实现多行注释的另类方法
Aug 22 Python
python实现比较两段文本不同之处的方法
May 30 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
python3 pygame实现接小球游戏
May 14 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
python 统计文件中的字符串数目示例
Dec 24 Python
Python爬虫防封ip的一些技巧
Aug 06 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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来自动调用不同服务器上的flash
2006/10/09 PHP
php获取字段名示例分享
2014/03/03 PHP
php中session与cookie的比较
2015/01/27 PHP
php实现的mongodb操作类
2015/05/28 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
详解Python中的__init__和__new__
2014/03/12 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
网络安全类面试题
2015/08/01 面试题
机械工程师的岗位职责
2013/11/17 职场文书
十佳大学生村官事迹
2014/01/09 职场文书
毕业寄语大全
2014/04/09 职场文书
音乐教师求职信
2014/06/28 职场文书
改革共识倡议书
2014/08/29 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle