简介

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

使用方法

用一个例子来介绍:

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

①创建一个名称为Account的类,该类拥有两个属性name和pwd,将这个类赋值给变量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. U盘发现器

    U盘发现器 package com.lx.io; import java.io.File; import java.io.IOException; import java.util.ArrayList ...

  2. Android Studio2.1 Run APP:Error: Execution failed for task

    Android Studio2.1 Run APP时,遇到错误 Error: Execution failed for task ':app:clean'. Unable to delete file ...

  3. 将csv格式的文件数据导入mysql中

    示例如下: load data infile 'test.csv'into table `test`fields terminated by ',' optionally enclosed by '& ...

  4. C语言基础 - 输出1-100万之间的素数

    其实这个很简单 代码 网上也一大堆... //判断素数 BOOL isPrime(int num) { for (int i = 2; i <= sqrt(num); i++) { //能整除则 ...

  5. 【css】盒子模型 之 概述

    摘要 一些基本的概念以及常见使用问题 概述 BFC 是css 中布局的核心 - 盒模型,根据块级元素及行级元素可分为块级容器, 行级容器,但容器内部都遵循 BFC BFC 空间布局 备注: IE 的盒 ...

  6. OpenLayers3--ol3--新特性

    OL3: A high-performance, feature-packed library for all your mapping needs < 一个可以满足各种地图应用的高性能的.功能 ...

  7. 根据百度,gps坐标获取天气

    楼主用的是阿里天气免费版,限制1000次,可以重复购买 下面放代码 var orgWindow = new OrganizeWindowProxy(WorkContext); var orgInfo ...

  8. 【.net 深呼吸】自定义应用程序配置节

    实际上,应用程序配置文件 App.config,是由各个节(Configuration Section)组成的,通常,配置节是按功能划分的,比如我们很熟悉的 appSettings.connectio ...

  9. Python网络数据采集1-Beautifulsoup的使用

    Python网络数据采集1-Beautifulsoup的使用 来自此书: [美]Ryan Mitchell <Python网络数据采集>,例子是照搬的,觉得跟着敲一遍还是有作用的,所以记录 ...

  10. 初学Python之 安装包的抉择~~

    上面的都是windows系统平台的安装包,哇,有没有后宫三千,不知道"临幸"哪一个的感觉~.~ 看了下面的你就明白啦. 毫无疑问,x86适合32位操作系统:x86-64适合64位操 ...