collections 中的namedtuple

文章目录

    • namedtuple 基本用法
    • namedtuple特性
      • _make(iterable)
      • _asdict()
      • _replace(**kwargs)
      • _fields
      • _fields_defaults
    • 参考:

namedtuple 基本用法

Tuple还有一个兄弟,叫namedtuple。虽然都是tuple,但是功能更为强大。对于namedtuple,你不必再通过索引值进行访问,你可以把它看做一个字典通过名字进行访问,只不过其中的值是不能改变的。

from collections import namedtuple
Animal = namedtuple('Animal', 'name age type')
perry = Animal(name="perry", age=31, type='cat')
print(perry)
print(perry.name)
# Animal(name='perry', age=31, type='cat')
# perry

为了构造一个namedtuple需要两个参数,分别是tuple的名字和其中域的名字。比如在上例中,tuple的名字是“Animal”,它包括三个域,分别是“name”、“age”和“type”。

Namedtuple比普通tuple具有更好的可读性,可以使代码更易于维护。同时与字典相比,又更加的轻量和高效。

  • 但是有一点需要注意,就是namedtuple中的属性都是不可变的。任何尝试改变其属性值的操作都是非法的。
  • Namedtuple还有一个非常好的一点是,它与tuple是完全兼容的。也就是说,我们依然可以用索引去访问一个namedtuple。

namedtuple特性

具名元组(namedtuple)除了拥有继承自基本元组的所有方法之外,还提供了额外的三个方法和两个属性,为了防止命名冲突,这些方法都会以下划线开头。

_make(iterable)

这是一个类函数,参数是一个迭代器,可以使用这个函数来构建具名元组实例

Point = namedtuple('Point', ['x', 'y'])
t = [11, 22]
print(Point._make(t))
#Point(x=11, y=22)

_asdict()

实例方法,根据具名元组的名称和其元素值,构建一个OrderedDict返回。

Point = namedtuple('Point', ['x', 'y'])
p =Point(x=11, y=22)
print(p._asdict())
#OrderedDict([('x', 11), ('y', 22)])

_replace(**kwargs)

实例方法,根据传入的关键词参数,替换具名元组的相关参数,然后返回一个新的具名元组,注意这里的拷贝方式。

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
print(p._replace(x=33))
print(p)
#Point(x=33, y=22)
#Point(x=11, y=22)

_fields

这是一个实例属性,存储了此具名元组的元素名称元组,在根据已经存在的具名元组创建新的具名元组的时候使用

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
print(p._fields)Color = namedtuple('Color', 'red green blue')
Pixel = namedtuple('Pixel', Point._fields + Color._fields)
print(Pixel(11, 22, 128, 255, 0))# ('x', 'y')
# Pixel(x=11, y=22, red=128, green=255, blue=0)

_fields_defaults

查看具名元组类的默认值

参考:

(1)https://baijiahao.baidu.com/s?id=1613589944704758634&wfr=spider&for=pc(Python进阶之路:namedtuple

(2). https://www.jianshu.com/p/60e6484a7088(namedtuple工厂函数精讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abap 中modify 的使用

1、modify table itab from wa Transporting f1 f2 ... 表示表itab中符合工作区wa 中关键字的一条数据的 f1 f2字段会被wa中对应的字段值更新。 modify用于更新和新增数据,当表中没有数据时就新增,有就修改。 2、在使用binary search 时一定要先排序&am…

python[进阶] 6.使用一等函数实现设计模式

文章目录6.1.1 经典的“策略”模式6.1.2 使用函数实现“策略”模式6.1.3 选择最佳策略:简单的6.1.4 找出模块中的全部6.2 “命令”模式6.1.1 经典的“策略”模式 为抽象基类(Abstract Base Class,ABC),这么做是为了使…

2014阿里巴巴校园招聘笔试题 - 中南站

转载于:https://www.cnblogs.com/gotodsp/articles/3530329.html

python中一些特殊方法的作用

我们先暂且称呼为特殊方法。 单下划线开头(_foo)双下划线开头的(__foo)双下划线开头和结尾的( __foo__)代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx im…

Spring的IOC原理[通俗解释一下]

1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖&am…

python爬虫面试遇到的问题

文章目录1python基础1.1 列表生成式和生成器的区别 ?1.2 如何不用任何循环快速筛掉列表中的奇数元素 ?1.3 map和reduce的用法1.4 装饰器的作用1.5 Python中__new__与__init方法的区别1.6 python中的设计模式1.7 lambda函数,以及它…

ubuntu18 常用命令

文章目录卸载和安装卸载和安装 1.打开一个终端,输入dpkg --list ,按下Enter键,终端输出以下内容,显示的是你电脑上安装的所有软件。 2.安装 dpkg –i name.deb 安装一个 deb 包;在终端上输入命令sudo apt-get --purge remove 包…

以嵌入式系统设计师考试成绩,开始嵌入式博客之旅

http://www.rkb.gov.cn/jsj/cms/s_contents/download/s_dt201003110106.html 转载于:https://www.cnblogs.com/yueqian-scut/p/3952268.html

SSH框架配置及Maven使用

1.SSH框架配置 1.1. SSH框架介绍 1.2. SSH框架配置 所需资源下载: l jdk; 从Oracle官方网站:http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html下载jdk,win7是默认安装在C:\Program Files (x86)\Java\jdk1.6.0_25路径下…

cookie,session的区别和联系(补充token)

文章目录1 http为什么是无状态的2 cookie 和session 的区别详解3 token参考:备注: 博客文章仅限于学习,禁止商用1 http为什么是无状态的 2 cookie 和session 的区别详解 这些都是基础知识,不过有必要做深入了解。先简单介绍一下。 二者的定…

库函数和系统调用的区别

前言 这是一对非常容易混淆的概念。对于用户( 应用程序开发者 )来说,并不一定要严格区分其意义。因为在用户看来,它们都是以C函数的形式出现的。但了解二者的区别对我们掌握整个计算机系统有很大帮助。 区别 1. 一部分库函数实现需要使用系统调用( 如 pr…

Flask 从入门到熟悉(不敢称为精通)

文章目录2.1 Flask介绍及其安装2.2 Virtualenv3.1 一个最小的应用3.2 外部课件服务器3.3 调试模式4.1 路由介绍4.2 变量规则4.3 构建URL4.4 HTTP 方法4 总结5.1 静态文件5.2 渲染模板5.3 练习66.1 接收请求数据6.2 请求对象6.3 文件上传6.4 Cookies6 总结77.1 重定向和错误7.2 …

Ext JS 5 beta版发布

原文:Announcing Public Beta of Ext JS 5我们非常高兴的宣布,Sencha Ext JS 5 beta版本开始进行公测了。这个beta版本可以让你、我们Sencha社区来对我们的Ext JS 5的工作进度进行评测。对于所以Ext JS开发人员,这事一个很好的机会来协助完成…

算法【二分查找】(数组)

1 .山脉数组的巅峰索引 信息 我们把符合下列属性的数组 A 称作山脉&#xff1a; A.length > 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < … A[i-1] < A[i] > A[i1] > … > A[A.length - 1] 给定一个确定为山脉的数组&#xff0c;返回任何满…

关于癌症的十大谣言

最近&#xff0c;国外网站总结了西方社会中流行的十个关于癌症的谣言&#xff0c;其中很多谣言在我们周围也有广泛的传播。 谣言1&#xff1a;癌症是人为导致的现代疾病 或许在公众的认知里&#xff0c;癌症在今天要比历史上任何时期都重要。不过实际上&#xff0c;癌症可不是一…

[python 进阶] 第7章 函数装饰器和闭包

文章目录7.1 装饰器基础知识7.2 Python何时执行装饰器7.3 使用装饰器改进“策略”7.4 变量作用域(global)备注 -比较字节码&#xff08;暂略&#xff09;7.5 闭包7.6 nonlocal声明global和nonlocal的区别7.7 实现一个简单的装饰器7.8 标准库中的装饰器7.8.1 使用functools.lru_…

自制“低奢内”CSS3登入表单,包含JS验证,请别嫌弃哦。

要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识。和JS/JQuery基本语法。 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到演示地址哦): 制作步骤: 一, html结构 <div id"home"><form id"login" class…

class里面只能写以下5种

转载于:https://www.cnblogs.com/phplearnings/p/3650849.html

【排序】算法(python实现)

文章目录python 排序算法1 插入排序1.1 直接插入排序算法思想1.2 希尔排序算法思想2. 选择排序2.1 简单选择排序2.2 堆排序参考python 排序算法 1 插入排序 1.1 直接插入排序 算法思想 直接插入排序的核心思想就是&#xff1a;将数组中的所有元素依次跟前面已经排好的元素相…

OpenSSL漏洞补救办法详解(转)

CVE-2014-0160漏洞背景 2014年4月7日OpenSSL发布了安全公告&#xff0c;在OpenSSL1.0.1版本中存在严重漏洞(CVE-2014-0160)。OpenSSL Heartbleed模块存在一个BUG&#xff0c;问题存在于ssl/dl_both.c文件中的心跳部分&#xff0c;当攻击者构造一个特殊的数据包&#xff0c;满足…