tuple类型数据的获取:

大家都知道,元组里面的数据获取只能通过下标的方式去获取,

比如 :

a = ('username', 'age', 'phone')

要获取username的话 ,就需要用a[0]的方式去获取,当元组中数据比较多的时候,用下标的方式获取数据就容易写错索引值。在这些场景下,用tuple存储数据就没那么方便,就会采用其他的方式去存储数据。

今天在学习的时候了解到了namedtuple 这么一种新的数据存储格式。

namedtuple 介绍:

namedtuple()是产生具有命名字段的元组的工厂函数,namedtuple 比普通tuple具有更好的可读性,可以使代码更易于维护。同时与字典相比,又更加的轻量和高效。

namedtuple还有一个非常好的一点是,它与tuple是完全兼容的。也就是说,我们依然可以用索引去访问一个namedtuple。

namedtuple()调用方式如下:

from collections import namedtuplenamedtuple(typename, field_names, *, verbose=False, rename=False, module=None)

返回一个新类,名为typename,它是元组tuple的子类。它的特性与tuple类似,是可索引可迭代的。

field_names的格式通常为字符串序列,如['name', 'age', 'phone', 'email']

,也可以是一个单一的字符串,每个字段以逗号分隔。

如果rename=True,无效的字段名将被自动更换为位置名称,如下所示:

['abc', 'def', 'ghi', 'abc']中无效的字段名为关键字'def'与重复字段名'abc',均视为无效,所以将自动更换为如下形式:['abc', '_1', 'ghi', '_3']。

下面演示namedtuple的具体用法:​​​​​​​

from collections import namedtupleuserinfo = namedtuple('user_obj', ['name', 'age', 'phone', 'email'])user1 = userinfo('admin', '18', '13578451256', '13578451256@163.com')print(type(user1), user1)print(user1.name)print(user1.age)
输出:<class '__main__.user_obj'> user_obj(name='admin', age='18', phone='13578451256', email='13578451256@163.com')admin18

从以上演示的代码中可以发现,要获取某个值非常的方便。

演示rename的效果:​​​​​​​

from collections import namedtupleb = namedtuple('user_obj1', ['name', 'def'], rename=True)b1 = b('libo' ,'12')print(b1)输出:user_obj1(name='libo', _1='12')

做测试,namedtuple可以用在哪些地方呢?

以前封装接口测试框架的时候,测试用例是写在excel里面的,读取到的每一行数据都是一个列表,获取元素的时候通过索引去获取的话,如果万一哪一天用例模板要加一列或者减一列,就有可能要改脚本,因为,之前的想法是,读取excel的每一行内容转成dict进行存储,用excel表头的内容当做dict的key,这样读取数据处理起来就非常麻烦:

现在,学了namedtuple之后,那么读取excel存储的格式就可以改为namedtuple进行存储,后面取数还是按照类似dict的方式去进行提取,方便多了,代码也比较优雅。这里暂时不演示改之前读excel的脚本了,等后面重新设计框架的时候可以考虑用namedtuple。

谈一下我对namedtuple的认知:

感觉namedtuple跟java编程里面的javabean实体类比较相似,定义了一个class,以及class下的一些属性值,每创建一条namedtuple的数据都是生成了对应class的一个实例对象,最终把这些对象存到list里面就是对象的集合。​​​​​​​

from collections import namedtuple
#就好比有一个user_obj对象,里面有4个属性userinfo = namedtuple('user_obj', ['name', 'age', 'phone', 'email'])  # 分别创建3个对象
user1 = userinfo('admin', '18', '13578451256', '13578451256@163.com')user2 = userinfo('demo', '19', '13512345678', '13512345678@163.com')user3 = userinfo('user03', '35', '13875456545', '13875456545@163.com')user_list = [user1, user2, user3]for i in user_list:    print(i.name)

看到上面这段代码,学过java的朋友,是不是有种似曾相识的感觉。这是不是就是面向对象编程呢 。本次的namedtuple讲解暂时就到这结束啦,如果后面有学习到更深入的用法再来进行补充!

python高级用法之命名元组namedtuple相关推荐

  1. [转载] Python3接口自动化框架:第三方openpyxl库读取excel之命名元组namedtuple承载数据

    参考链接: Python中的命名元组Namedtuple 背景:python自动化测试框架中,不管是UI还是api,都逃脱不掉数据驱动,除去一些框架的数据驱动方式,最直接的就是我们的excel测试用例 ...

  2. Python高级用法总结

    Python很棒,它有很多高级用法值得细细思索,学习使用.本文将根据日常使用,总结介绍Python的一组高级特性,包括:列表推导式.迭代器和生成器.装饰器. 列表推导(list comprehensi ...

  3. python高级用法技巧-Python高级用法总结

    列表推导(list comprehensions) 场景1:将一个三维列表中所有一维数据为a的元素合并,组成新的二维列表. 最简单的方法:新建列表,遍历原三维列表,判断一维数据是否为a,若为a,则将该 ...

  4. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple

    collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...

  5. python高级(如何为元组中的每个元素命名,提高程序可读性)

    案列: 学生信息系统中数据为固定格式: (名字,年龄,性别,邮箱地址,...) 学生数量很大为了减少存储开销,对每个学生信息用元组表示: ('jim',16,'male','jim@gmail.com ...

  6. 番外.1.Python高级用法

    目录 Lambda表达式 map函数 filter函数 reduce函数 三大推导式 列表推导式 集合推导式 字典推导式 闭包 装饰器.语法糖.注解 Lambda表达式 Lambda表达式又被称之为匿 ...

  7. Matlab与Python高级用法【专栏总结】

    该专栏为日更,为付费专栏. 生命不息,战斗不止.

  8. python命名元组

    Python的元组不能为元组内部的数据进行命名,而 collections.namedtuple 可以来构造一个含有字段名称的元组类,命名元组可以通过逗号+字段名来获取元素值: collections ...

  9. Python的重要模块:collections (namedtuple、defaultdict、deque、Counter、OrderedDict、ChainMap)

    collections 模块作用 包含双端队列 deque.默认字典 defaultdict.命名元组 namedtuple.计数器 Counter.Ordereddict 和 ChainMap 等重 ...

最新文章

  1. DotNetCore跨平台~EFCore数据上下文的创建方式
  2. C#程序设计笔记(第九章)
  3. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
  4. (转)走进AngularJs(六) 服务
  5. myeclipse试用小记----Hibernate多对一双向关联(2)
  6. 使用phpize建立php扩展(Cannot find config.m4)
  7. 音视频开发(7)---流媒体服务器原理和架构解析
  8. 使用Velocity(VTL)调用自定义C# .net 中的方法
  9. Vue-组件之间的数据共享
  10. c语言不定参数的使用,C语言中不定参数的实现
  11. hfss matlab api,HFSS-Matlab-API实践体会与HFSS Scripting快速入门
  12. 模拟电子技术知识点总结
  13. Matlab:拉盖尔高斯光束的干涉
  14. AMD ROCm 硬件支持情况
  15. 浅谈mian函数的参数解析
  16. 大学计算机系的电视剧,陈若轩成肖奈之后又一个计算机系校草!合作徐娇和最美学姐...
  17. 《如何阅读一本书》——读书方法的整理
  18. js 点击按钮或者图片,实现图片上传并显示在页面上
  19. 前端面试题(附答案)完善中……
  20. Cocos 技术派第4期 | 实时竞技小游戏技术实现分享

热门文章

  1. Win11自带的输入法不见了
  2. LOL英雄联盟自动打人机训练升级【CircuitPython】
  3. Reactor模式详解及 三种模式演变
  4. Mysql主从复制的三种同步方式和半同步复制配置
  5. 嫌微信公众号排版太丑?这里让你一步到位
  6. 不要小瞧你身边那位看起来很“懦弱”的中年人
  7. axios 美[æk‘sioʊz]
  8. 就让烟花来代替我对你的祝福叭 ~ 【生日快乐-简单烟花祝福特效】
  9. ResponseResult
  10. 0x80073712(0x80073712解决方法)