namedtuple()

参考文章地址:http://www.cnblogs.com/herbert/p/3468294.html

namedtuple是继承自tuple的子类。namedtuple和tuple比,有更多更酷的特性。namedtuple创建一个和tuple类似的对象,而且对象拥有可以访问的属性。这对象更像带有数据属性的类,不过数据属性是只读的。

实例如下:

 import  collections
Mytuple=collections.namedtuple('Mytuple',['x','y'])
n=Mytuple(1,2)
print n.x
1
print n.y
2
print n
Mytuple(x=1, y=2)

namedtuple

Mytuple = namedtuple('TPoint', ['x', 'y']) 创建一个Mytuple类型,而且带有属性x, y.

来解释一下nametuple的几个参数:

 import collections
Person = collections.namedtuple('Person','name age gender')
print 'Type of Person:', type(Person)
Bob = Person(name='Bob', age=30, gender='male')
print 'Representation:', Bob
Jane = Person(name='Jane', age=29, gender='female')
print 'Field by Name:', Jane.name
for people in [Bob,Jane]:
print "%s is %d years old %s" % people

example

以Person = collections.namedtuple(‘Person’, 'name age gender’)为例,

其中’Person’是这个namedtuple的名称,后面的’name age gender’这个字符串中三个用空格隔开的字符告诉我们,
我们的这个namedtuple有三个元素,分别名为name, age和gender。
我们在创建它的时候可以通过Bob = Person(name=’Bob’, age=30, gender=’male’)这种方式,这类似于Python中类对象的使用。
而且,我们也可以像访问类对象的属性那样使用Jane.name这种方式访问namedtuple的元素。
其输出结果如下:

 Type of Person: <type 'type'>
Representation: Person(name='Bob', age=30, gender='male')
Field by Name: Jane
Bob is 30 years old male
Jane is 29 years old female

results

几个重要的方法:

1.把数据变成namedtuple类:

Mytuple = namedtuple('Mytuple', ['x', 'y'])
test= [11, 22]
p = Mytuple ._make(test)
p
Mytuple (x=11, y=22)

2. 根据namedtuple创建的类生成的类示例,其数据是只读的,如果要进行更新需要调用方法_replace.

 >>> p
Mytuple(x=11, y=22)
>>> p.x
11
>>> p.y
22
>>> p.y=33 Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
p.y=33
AttributeError: can't set attribute
>>> p._replace(y=33)
Mytuple(x=11, y=33)
>>> p
Mytuple(x=11, y=22)
>>>

3.将数据字典转化成namedtuple类型:注意一下p和dp是两个不同的实例,不要被都叫Mytuple给误导了!

 >>> d={'x':44,'y':55}
>>> dp=Mytuple(**d)
>>> dp
Mytuple(x=44, y=55)
>>> p
Mytuple(x=11, y=22)

4.namedtuple最常用还是出现在处理来csv或者数据库返回的数据上。利用map()函数和namedtuple建立类型的_make()方法

 EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

 import csv
for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
print(emp.name, emp.title) # sqlite数据库
import sqlite3
conn = sqlite3.connect('/companydata')
cursor = conn.cursor()
cursor.execute('SELECT name, age, title, department, paygrade FROM employees')
for emp in map(EmployeeRecord._make, cursor.fetchall()):
print(emp.name, emp.title) # MySQL 数据库
import mysql
from mysql import connector
from collections import namedtuple
user = 'herbert'
pwd = '######'
host = '127.0.0.1'
db = 'world'
cnx = mysql.connector.connect(user=user, password=pwd, host=host,database=db)
cur.execute("SELECT Name, CountryCode, District, Population FROM CITY where CountryCode = 'CHN' AND Population > 500000")
CityRecord = namedtuple('City', 'Name, Country, Dsitrict, Population')
for city in map(CityRecord._make, cur.fetchall()):
print(city.Name, city.Population)

collection系列用法-namedtuple()的更多相关文章

  1. collection系列用法-deque双向队列

    deque双向队列 Deque可以从两端添加和删除元素.常用的结构,是它的简化版本. Deque支持序列的常用操作,现在举一个简单例子,你会发现其实跟平成的list没啥区别: import colle ...

  2. collection系列用法-defaultdict()

    defaultdict() 定义以及作用 返回一个和dictionary类似的对象,和dict不同主要体现在2个方面: 可以指定key对应的value的类型. 不必为默认值担心,换句话说就是不必担心有 ...

  3. 3.python基础补充(集合,collection系列,深浅拷贝)

    一.集合 1.集合(set): 把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(set elements):组成集合的成员 python的set和其他语言类似, 是一个无序不重复 ...

  4. Python 从零学起(纯基础) 笔记 之 collection系列

    Collection系列  1.  计数器(Counter) Counter是对字典类型的补充,用于追踪值的出现次数   ps  具备字典所有功能 + 自己的功能 Counter import col ...

  5. python开发学习-day03(set集合、collection系列 、深浅拷贝、函数)

    s12-20160116-day03 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  6. python collection系列

    collection系列 不常用功能,需要进行模块功能导入: import collection Counter 常用方法测试: #!/usr/local/env python3 ''' Author ...

  7. Java系列:Collection.toArray用法研究

    该方法的签名如下: <T> T[] Collection.toArray(T[] arrayToFill); 这里想验证两个问题: 1)arrayToFill什么时候会被填充: 2)arr ...

  8. 八、collection系列-----计数器、有序字典、默认字典、可命名元组、双向队列、单向队列一.计数器(对字典的扩展)

    一.计数器(对字典的扩展) 有如下一个字典: dic = {'k1':123,'k2':123,'k3':12} 统计12出现的次数,123出现的次数   1.统计出现次数 >>> ...

  9. 基础(三):yum(RedHat系列)和apt-get(Debian系列 )用法及区别

    文章转载来自:http://blog.csdn.net/chengly0129/article/details/70169760 一般来说著名的linux系统基本上分两大类:1.RedHat系列:Re ...

随机推荐

  1. Oracle 导出HTML

    http://www.linuxidc.com/Linux/2010-10/29133.htm Oracle 执行计划: http://czmmiao.iteye.com/blog/1471756 h ...

  2. 联想企业网盘:SaaS服务集群化持续交付实践

    1      前言 当代信息技术飞速发展,软件和系统的代码规模都变得越来越大,而且组件众多,依赖繁复,每次新版本的发布都仿佛是乘坐一次无座的绿皮车长途夜行,疲惫不堪.软件交付是一个复杂的工程,涉及到软 ...

  3. Android Studio安装使用图文教程

    原文 http://jingyan.baidu.com/article/1876c852a25cb4890b1376fa.html Google I/O开发者大会上宣布,Android Studio ...

  4. WF编译报错

    最近在研究WF的时候,遇到了一个未知的错误,错误信息时这样的 错误 102 扩展“Microsoft.Activities.Build.Validation.ValidationBuildExtens ...

  5. service:jmx:rmi:///jndi/rmi

    service:jmx:rmi:///jndi/rmi://ip:9889/jmxrmi http://stackoverflow.com/questions/2768087/explain-jmx- ...

  6. Java_SSH项目主要步骤记录

    建立Spring-Struts-Hibernate的步骤整理 1. 建立web project 2. 建立hernate, action, service包 3. 右击项目,add myeclipse ...

  7. java 多线程使用方法及Socket的使用

    public class newThread implements Runnable{ public void run(){ dosome(); } public void dosome(){ Sys ...

  8. poj1004

    Financial Management Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 125635   Accepted: ...

  9. CodeForces - 508D Tanya and Password(欧拉通路)

    Description While dad was at work, a little girl Tanya decided to play with dad characters. She has ...

  10. HBASE学习笔记--API

    HBaseConfiguration HBaseConfiguration是每一个hbase client都会使用到的对象,它代表的是HBase配置信息.它有两种构造方式: public HBaseC ...