简介

collections.namedtuple是一个工厂方法,它可以动态的创建一个继承tuple的子类。跟tuple相比,返回的子类可以使用名称来访问元素。

使用方法

用一个例子来介绍:

>>> from collections import namedtuple
>>> Account = namedtuple("Account", ["name","pwd"]) ①
>>> account = Account(*("bingyang", "123456")) ②
>>> account.name
'bingyang'
>>> account.pwd
'123456'

①创建一个名称为Account的类,该类拥有两个属性namepwd,将这个类赋值给变量Account

②调用这个类,并传递属性的值。 值的顺序要跟定义属性的顺序一致,或者是使用另外一种方式: Account(name='bingyang', pwd='123456')

nametuple一共支持4个参数:def namedtuple(typename, field_names, verbose=False, rename=False)

typename

类名称

field_names

字段名称。

它的值可以是一个能保证元素间顺序不变的可遍历对象或者是逗号链接起来的字符串,例如:

>>> Account = namedtuple("Account", ("name", "pwd"))
>>> Account = namedtuple("Account", "name,pwd")

verbose

设置为True的话会打印出类的定义代码。

>>> Account = namedtuple("Account", "name,pwd", verbose=True)
class Account(tuple):
'Account(name, pwd)' __slots__ = () _fields = ('name', 'pwd') def __new__(_cls, name, pwd):
'Create new instance of Account(name, pwd)'
return _tuple.__new__(_cls, (name, pwd)) @classmethod
def _make(cls, iterable, new=tuple.__new__, len=len):
'Make a new Account object from a sequence or iterable'
result = new(cls, iterable)
if len(result) != 2:
raise TypeError('Expected 2 arguments, got %d' % len(result))
return result def __repr__(self):
'Return a nicely formatted representation string'
return 'Account(name=%r, pwd=%r)' % self def _asdict(self):
'Return a new OrderedDict which maps field names to their values'
return OrderedDict(zip(self._fields, self)) def _replace(_self, **kwds):
'Return a new Account object replacing specified fields with new values'
result = _self._make(map(kwds.pop, ('name', 'pwd'), _self))
if kwds:
raise ValueError('Got unexpected field names: %r' % kwds.keys())
return result def __getnewargs__(self):
'Return self as a plain tuple. Used by copy and pickle.'
return tuple(self) __dict__ = _property(_asdict) def __getstate__(self):
'Exclude the OrderedDict from pickling'
pass name = _property(_itemgetter(0), doc='Alias for field number 0') pwd = _property(_itemgetter(1), doc='Alias for field number 1') >>>

rename

默认情况下,namedtuple会检查我们传递的属性名称是否符合规范,对于不符合规范的名称会抛出异常。当我们设置rename为异常时,将会对不符合规范的名称设置为_$d$d的值为属性设置时候的index),例如:

>>> Account = namedtuple("Account", ['1','2'],  rename=True)
>>> account = Account('bingyang', '123456')
>>> account._0
'bingyang'
>>> account._1
'123456'

总结

namedtuple的主要作用是将代码与它所控制的元素位置解耦。所以在一些比较大的元组列表中,我们可以将元祖转为namedtuple使用,这样就算元祖增加了新的列,代码也不会崩溃。而且使用名称来访问数据,代码可读性也比较高。

python中的collections.namedtuple的更多相关文章

  1. python中的collections

    python中有大量的内置模块,很多是属于特定开发的功能性模块,但collections是属于对基础数据的类型的补充模块,因此,在日常代码中使用频率更高一些,值得做个笔记,本文只做主要关键字介绍,详细 ...

  2. Python中的collections模块

    Python中内置了4种数据类型,包括:list,tuple,set,dict,这些数据类型都有其各自的特点,但是这些特点(比如dict无序)在一定程度上对数据类型的使用产生了约束,在某些使用场景下效 ...

  3. python中namedtuple介绍

    namedtuple:namedtuple类位于collections模块,有了namedtuple后通过属性访问数据能够让我们的代码更加的直观更好维护.namedtuple能够用来创建类似于元祖的数 ...

  4. Python中collections模块

    目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...

  5. python中的命名元组namedtuple

    namedtuple是继承自tuple的子类.namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性 可利用collections.namedtuple构建一个简单的类. fro ...

  6. Python中collections模块的使用

    本文将详细讲解collections模块中的所有类,和每个类中的方法,从源码和性能的角度剖析. 一个模块主要用来干嘛,有哪些类可以使用,看__init__.py就知道 '''This module i ...

  7. Python 中的容器 collections

    写在之前 我们都知道 Python 中内置了许多标准的数据结构,比如列表,元组,字典等.与此同时标准库还提供了一些额外的数据结构,我们可以基于它们创建所需的新数据结构. Python 附带了一个「容器 ...

  8. Python中比元组更好用的namedtuple

    一.思考 1.什么是元组? 不可变的序列类型 "不能修改的列表" 2.元组支持哪些操作? 元组是序列类型,支持序列类型的所有操作 通过索引取值 one_tuple = (" ...

  9. Python中的高性能容器--collections

    集合模块 相对于 Python 中内置的称为链表.集合.字典和元组的默认容器类型来说,集合模块( collection module )提供了高性能的备选方案( alternative ). 简单地看 ...

随机推荐

  1. PHP中定义常量define与const

    我们通常把不经常变的值定义成常量,常量一般用全部大写来表示,前面不加美元符号,也可减少团队开发的出错.那么define和const有什么区别呢? 1.const是一个语言结构:而define是一个函数 ...

  2. nopCommerce 3.9 大波浪系列 之 引擎 NopEngine

    本章涉及到的内容如下 1.EngineContext初始化IEngine实例 2.Autofac依赖注入初始化 3.AutoMapper框架初始化 4.启动任务初始化 一.EngineContext初 ...

  3. ES6中的箭头函数

    关于函数表达式中的this:自动引用正在调用当前方法的.前的对象1.obj.fun()中的this fun中的this -> obj2.new Fun() Fun中的this -> 正在创 ...

  4. ES6关于Unicode的相关扩展

    前面的话 字符串是编程中重要的数据类型,只有熟练掌握字符串操作才能更高效地开发程序.JS中的字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列.在过去,16位足以包含任 ...

  5. STK卫星工具箱下载

    简介 STK的全称是Satellite Tool Kit(卫星工具箱),STK/Pro 9.0最新出品,完整版,是由Analytical Graphics公司开发的一款在航天工业领域中处于绝对领先地位 ...

  6. MySQL日志文件之错误日志和慢查询日志详解

    今天天气又开始变得很热了,虽然很热很浮躁,但是不能不学习,我在北京向各位问好.今天给大家分享一点关于数据库日志方面的东西,因为日志不仅讨厌而且还很重要,在开发中时常免不了与它的亲密接触,就在前几天公司 ...

  7. Unity编辑器重写Inspector面板,面板中编辑的数据不触发场景发生变化的问题。

    今天开始协助主程一起制作新框架.主程让我写关于新版UI框架注册UI预制体用的快捷编辑器. 现学现写,总算完成了. 可以直接把选中的预制体添加到UIController的数组中,期间涉及到改变大小.所以 ...

  8. EasyUI combobox 中文无法检索最终解决方案!

    写在前面: 因为之前一直用EasyUI的combobox控件,但是苦于在火狐浏览器下输入中文无法直接检索必须在输入完成后再敲击一下键盘才可以(按一下shift或空格),原因是中文输入法屏蔽了EasyU ...

  9. Android高效内存之让你的图片省内存

    Android高效内存之让你的图片省内存 在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用.而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存占用可 ...

  10. vue中watched属性

    watched属性,vue中的观察属性,可用来监听一个值的变化 默认有两个参数,新值,旧值 data (){ return { currentCity: "深圳" } } watc ...