题图:Photo by Paulo Jacobe on Unsplash

大家好,我是军哥

今天开始,开一个冷门模块的系列更新。

collections模块算得上是最冷门的模块之一,用得人少,但是功能很强大。

collections提供了4个重要的数据类型,在实际开发中或多或少会接触到,通过使用这些数据类型,可以让你的代码变得更优雅、更地道。

今天先来介绍 namedtuple 这个类型

namedtuple

namedtuple 是 元组(tuple)类型的子类,所以本质上它还是一个元组类型,继承了元组所有的的特性,namedtuple 特别之处在于你可以通过名字来访问元组中的元素,类似字典,通过key来访问value。

以前访问元组中的元素必须通过索引访问

>>>x, y = 1,2

>>>point = (x, y)

>>>point[0]

1

>>>point[1]

2

现在你可以通过属性名来访问,先看如何定义一个 namedtuple

定义

fromcollectionsimportnamedtuple# 首先定义一个namedtuple类# 类的名字是"Point"# 它有两个属性 x 和 y>>>Point = namedtuple('Point', ['x','y'])# namedtuple初始化>>>p = Point(x=11, y=22)# 和tuple类型一样,通过下标索引访问,等价于 p = (11, 22)>>>p[0] + p[1]33# 通过字段属性来访问,这是namedtuple独有的特性>>>p.x + p.y33

咋看起来,要使用 namedtuple还是挺麻烦的,不像tuple一样,直接 p = (11, 22) 就定义了一个元组对象,那什么场景下会用到 namedtuple呢?

答案是在使用tuple可读性不强,但是又不希望用class来自定义类的时候。

比如有这样一组数据

bob = ('Bob', 30, 'male')

看值其实你是不知道这里面的3个元素分别表示什么意思的,也许你能猜出来,但也仅仅是靠猜,那怎么样可读性更好一点呢?其实,我们可以自定义一个类来抽象化这组数据

class Person:

def __init__(name, age, gender):

self.name = name

self.age = age

self.gender = gender

bob = Person('Bob', 30, 'male')

通过Person类,你可以一目了然,知道Bob对应的就是name,30对应的是 age,male 对应的gender字段。

可是这样做,虽然可读性更强一点了,但是代码更麻烦,更重要的是创建一个这样的对象消耗的成本会比纯粹的元组高很多。

而 namedtuple 正好可以解决这种问题,它即继承了tuple良好的性能,又有可读性的特点。

from collections import namedtuple

Person = namedtuple("Person", "name age gender")

bob = Person(name='Bob', age=30, gender='male')

>>>bob[0]

'Bob'

>>>bob.name

'Bob'

>>>bob.age

30

>>>bob[1]

30

你有没有注意到,namedtuple可认为是一种简单的自定义类,可以指定属性,但是不能像class定义的类一样定义方法。因此,在考虑到如果定义一个类,类里面不需要定义方法时,其实就可以用namedtuple来代替。

这就是namedtuple的作用,你了解了吗?

推荐:

python 冷门_Python最冷门的模块相关推荐

  1. arcgis批量出图python代码_python使用arcpy.mapping模块批量出图

    出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用的类 ...

  2. re python 引擎_python 详解re模块

    正则表达式的元字符有. ^ $ * ? { [ ] | ( ) .表示任意字符 []用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系. ^ 如果 ...

  3. python中模块和函数_Python中函数和模块的体验与使用

    函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...

  4. python中datetime模块_python中的datetime模块

    datetime是python中日期和时间管理模块,包含date,time,datetime,timedelta,datetime_CAPI,sys,timezone等类 datetime模块中包含的 ...

  5. python必学的模块_Python必学的模块有哪些?

    展开全部 简单来说,模块就是一堆代码实现某个功32313133353236313431303231363533e4b893e5b19e31333433653866能,它们是已经写好的.py文件,在我们 ...

  6. python excel取列_python取excel表格第一列数据-python操作excel,使用xlrd模块,获取某一列数据的......

    怎样用python,读取excel中的一列数据 Python对Excel的读写主要有xlrd.copyxlwt.xlutils.openpyxl.xlsxwriter几种. 1.xlrd主要用来读百取 ...

  7. python解析html xml最好的模块_python中处理xml的模块哪个好?

    python中可以使用BeautifulSoup4或pyQuery模块处理xml文件.pyQuery模块比较适合于对CSS选择器等的支持,BeautifulSoup4模块使用简单. Beautiful ...

  8. python的init方法在哪个模块_Python学习笔记(九)——Python _init_特殊方法和模块...

    一.特殊方法 特殊方法就是形如_future_\_main_这类方法的统称. 1.特殊方法 #__init__构造方法 class FooBar: def __init__(self): #构造方法, ...

  9. python中io中的+模式_Python的高级特性,模块和IO操作

    今天我们学习Python的高级特性.模块和IO操作,通过学习这些,我们可以更快的了解Python,使用Python. 高级特性中会讲述列表生成式.生成器.和一些高级函数,学习这些方便我们快速的生成列表 ...

最新文章

  1. 每列大于0的个数_二进制中1的个数(剑指offer第十四天)
  2. py匹配字符串中间的字符串
  3. 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT
  4. [I2C]I2C总线协议图解
  5. 使用Docker-镜像命令
  6. 08_JS工厂方法和构造函数
  7. 【图像风格转换】项目参考资料总结
  8. html特殊符号sm,以前搜集的一些资料—html中的特殊字符(2)
  9. Wordpress卡在 wp-admin/setup-config.php,一片空白
  10. Atitit 项目常用模块 非业务模块 通用技术模块 attilax大总结 理论上可行。但要限制接口方式。 不然现在很多ui与后端接口模式很多,导致组合爆炸。。。 常用模块也就100来个而已。。
  11. 性能监视器 Performance Monitor-对SQLSERVER进行性能监控
  12. steam++(GitHub加速)433端口占用解决方案
  13. 光波传输的角谱理论【理论,实例及matlab代码】
  14. 百度一键Root授权管理完美卸载解决方案
  15. 什么叫手机或设备的ID
  16. oracle误删除一条数据库,Oracle误删除数据的恢复方法
  17. 开发脚手架及封装自动化构建工作流
  18. How to use Hibernate - XML Configuration
  19. Wine Reviews(葡萄酒评论相关数据集)
  20. luogu p1967 货车运输

热门文章

  1. brew gd php_PHPBrew 使用指南
  2. ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小
  3. c语言常用绘图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  4. php框架where条件使用,where条件
  5. Mysql 解决1251- Client does not support authentication protocol requested by server...的问题
  6. Linux之Sed工具的使用详解
  7. 大数据入门级学习路线
  8. java 文件 剪切_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇
  9. android app增加内存大小,android – 增加分配给应用程序的内存
  10. oracle查看控件文件 tns