简单讲解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 相关文章推荐
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python模拟登录验证码(代码简单)
Feb 06 Python
python中实现精确的浮点数运算详解
Nov 02 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
python实现dijkstra最短路由算法
Jan 17 Python
Python并发:多线程与多进程的详解
Jan 24 Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
使用keras时input_shape的维度表示问题说明
Jun 29 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
用pip给python安装matplotlib库的详细教程
Feb 24 Python
python3 字符串str和bytes相互转换
Mar 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
PHP入门速成(2)
2006/10/09 PHP
用PHP实现的生成静态HTML速度快类库
2007/03/31 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
关于Laravel-admin的基础用法总结和自定义model详解
2019/10/08 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python爬虫实例详解
2018/06/19 Python
分析python请求数据
2018/08/19 Python
keras实现多种分类网络的方式
2020/06/11 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
如何用SQL语句进行模糊查找
2015/09/25 面试题
Python面试题集
2012/03/08 面试题
七年级英语教学反思
2014/01/15 职场文书
上课看小说检讨书
2014/02/22 职场文书
教研处工作方案
2014/05/26 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
CSS基础详解
2021/10/16 HTML / CSS
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android