python 冷门_Python最冷门的模块
题图: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最冷门的模块相关推荐
- arcgis批量出图python代码_python使用arcpy.mapping模块批量出图
出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用的类 ...
- re python 引擎_python 详解re模块
正则表达式的元字符有. ^ $ * ? { [ ] | ( ) .表示任意字符 []用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系. ^ 如果 ...
- python中模块和函数_Python中函数和模块的体验与使用
函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 1.1 快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个 ...
- python中datetime模块_python中的datetime模块
datetime是python中日期和时间管理模块,包含date,time,datetime,timedelta,datetime_CAPI,sys,timezone等类 datetime模块中包含的 ...
- python必学的模块_Python必学的模块有哪些?
展开全部 简单来说,模块就是一堆代码实现某个功32313133353236313431303231363533e4b893e5b19e31333433653866能,它们是已经写好的.py文件,在我们 ...
- python excel取列_python取excel表格第一列数据-python操作excel,使用xlrd模块,获取某一列数据的......
怎样用python,读取excel中的一列数据 Python对Excel的读写主要有xlrd.copyxlwt.xlutils.openpyxl.xlsxwriter几种. 1.xlrd主要用来读百取 ...
- python解析html xml最好的模块_python中处理xml的模块哪个好?
python中可以使用BeautifulSoup4或pyQuery模块处理xml文件.pyQuery模块比较适合于对CSS选择器等的支持,BeautifulSoup4模块使用简单. Beautiful ...
- python的init方法在哪个模块_Python学习笔记(九)——Python _init_特殊方法和模块...
一.特殊方法 特殊方法就是形如_future_\_main_这类方法的统称. 1.特殊方法 #__init__构造方法 class FooBar: def __init__(self): #构造方法, ...
- python中io中的+模式_Python的高级特性,模块和IO操作
今天我们学习Python的高级特性.模块和IO操作,通过学习这些,我们可以更快的了解Python,使用Python. 高级特性中会讲述列表生成式.生成器.和一些高级函数,学习这些方便我们快速的生成列表 ...
最新文章
- 每列大于0的个数_二进制中1的个数(剑指offer第十四天)
- py匹配字符串中间的字符串
- 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT
- [I2C]I2C总线协议图解
- 使用Docker-镜像命令
- 08_JS工厂方法和构造函数
- 【图像风格转换】项目参考资料总结
- html特殊符号sm,以前搜集的一些资料—html中的特殊字符(2)
- Wordpress卡在 wp-admin/setup-config.php,一片空白
- Atitit 项目常用模块 非业务模块 通用技术模块 attilax大总结 理论上可行。但要限制接口方式。 不然现在很多ui与后端接口模式很多,导致组合爆炸。。。 常用模块也就100来个而已。。
- 性能监视器 Performance Monitor-对SQLSERVER进行性能监控
- steam++(GitHub加速)433端口占用解决方案
- 光波传输的角谱理论【理论,实例及matlab代码】
- 百度一键Root授权管理完美卸载解决方案
- 什么叫手机或设备的ID
- oracle误删除一条数据库,Oracle误删除数据的恢复方法
- 开发脚手架及封装自动化构建工作流
- How to use Hibernate - XML Configuration
- Wine Reviews(葡萄酒评论相关数据集)
- luogu p1967 货车运输
热门文章
- brew gd php_PHPBrew 使用指南
- ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小
- c语言常用绘图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
- php框架where条件使用,where条件
- Mysql 解决1251- Client does not support authentication protocol requested by server...的问题
- Linux之Sed工具的使用详解
- 大数据入门级学习路线
- java 文件 剪切_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇
- android app增加内存大小,android – 增加分配给应用程序的内存
- oracle查看控件文件 tns