Python namedtuple(命名元组)使用实例

#!/usr/bin/python3

import collections

MyTupleClass = collections.namedtuple(‘MyTupleClass‘,[‘name‘, ‘age‘, ‘job‘])
obj = MyTupleClass("Tomsom",12,‘Cooker‘)
print(obj.name)
print(obj.age)
print(obj.job)

执行结果:

Tomsom
12
Cooker

namedtuple对象就如它的名字说定义的那样,你可以给tuple命名,具体看下面的例子:

#!/usr/bin/python3

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)

执行结果:

Type of Person: <class ‘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

  来解释一下nametuple的几个参数,以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的元素。其输出结果如下:

  但是在使用namedtyuple的时候要注意其中的名称不能使用Python的关键字,如:class def等;而且也不能有重复的元素名称,比如:不能有两个’age age’。如果出现这些情况,程序会报错。但是,在实际使用的时候可能无法避免这种情况,比如:可能我们的元素名称是从数据库里读出来的记录,这样很难保 证一定不会出现Python关键字。这种情况下的解决办法是将namedtuple的重命名模式打开,这样如果遇到Python关键字或者有重复元素名 时,自动进行重命名。

看下面的代码:

import collections
with_class=collections.namedtuple(‘Person‘,‘name age class gender‘,rename=True)
print with_class._fields
two_ages=collections.namedtuple(‘Person‘,‘name age gender age‘,rename=True)
print two_ages._fields

其输出结果为:

(‘name‘, ‘age‘, ‘_2‘, ‘gender‘)
(‘name‘, ‘age‘, ‘gender‘, ‘_3‘)

  我们使用rename=True的方式打开重命名选项。可以看到第一个集合中的class被重命名为 ‘_2‘ ; 第二个集合中重复的age被重命名为 ‘_3‘这是因为namedtuple在重命名的时候使用了下划线 _ 加元素所在索引数的方式进行重命名。

附两段官方文档代码实例:

1) namedtuple基本用法

>>> # Basic example
>>> Point = namedtuple(‘Point‘, [‘x‘, ‘y‘])
>>> p = Point(11, y=22) # instantiate with positional or keyword arguments
>>> p[0] + p[1] # indexable like the plain tuple (11, 22)
33
>>> x, y = p # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y # fields also accessible by name
33
>>> p # readable __repr__ with a name=value style
Point(x=11, y=22)

2) namedtuple结合csv和sqlite用法

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)
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)
时间: 2024-07-31 12:34:41

Python namedtuple(命名元组)使用实例的相关文章

python namedtuple(命名元组)

collections模块基本介绍 collections在通用的容器dict,list,set和tuple之上提供了几个可选的数据类型 namedtuple() factory function for creating tuple subclasses with named fields deque list-like container with fast appends and pops on either end ChainMap dict-like class for creatin

python namedtuple命名元组

from collections import namedtuple Animal=namedtuple('Animal','name age type') perry=Animal(name='perry',age=1,type='cat') print(perry.type) print(perry[0]) print(perry._asdict()) 原文地址:https://www.cnblogs.com/mahailuo/p/10201648.html

python学习--为元组中每个元素命名

官方文档:namedtuple():命名元组函数赋予元组中每个位置的含义,并允许更具可读性的自编写代码.它们可以在任何使用常规元组的地方使用,并且可以通过名称而不是位置索引来添加字段. 实例: from collections import namedtupleStudent=namedtuple('Student',['name','age','sex','email']) 第一个参数为设置创建子类的名字,创建一个Student类的元组子类. 方法返回的就是一个元组的子类.s=Student(

python 命名元组(namedtuple)

我们知道c/c++语言中,有结构体这种数据类型: struct{ string name; int age; char sex; }student; 在对结构体对象进行赋值或者取值时可以使用.运算符进行操作. 那么问题来,python中有没有这个数据类型呢?答案是肯定有的,它就是命名元组(namedtyple). 首先来看一下python中普通元组的不方便之处: Bob=("bob",30,'male') #如果想知道Bobde 名字,则需要使用索引位置进行读取,如下 name=Bob

Python学习—常用时间类与命名元组

常用时间类与命名元组 1. 常用时间类date 日期类time 时间类datetimetimedelat 时间间隔2. 一些术语和约定的解释:1.时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日开始按秒计算的偏移量(time.gmtime(0))此模块中的函数无法处理1970纪元年以前的时间或太遥远的未来(处理极限取决于C函数库,对于32位系统而言,是2038年)2.UTC(Coordinated Universal Time,世界协调时)也叫格林威治天文时间,是

Python冷知识之命名元组

元组tuple:在Python数据类型中属于不可变数据类型 命名元组:namedtuples:是python中的元组数据类型的扩展 普通元组中的数据只能通过索引(index)来访问 命名元组:可以通过唯一标识符来访问存储的数据,(名字.对象) 使用: 导入 from collection import namedtuple 定义: In [11]: Car = namedtuple('Car', 'color size mileage') In [12]: mycar = Car('red','

Python collections系列之可命名元组

可命名元组(namedtuple)  根据nametuple可以创建一个包含tuple所有功能以及其他功能的类 1.创建一个坐标类 import collections # 创建类, defaultdict,坐标中会使用 MytupleClass = collections.namedtuple('MytupleClass',['x', 'y', 'z']) obj = MytupleClass(11, 22, 33) 2.查询类中的x,y,z坐标 # 默认情况下元组只能使用索引进行访问,通过创

namedtuple可命名元组

import collections as con #用namedtyuple创建一个类 classtuple = con.namedtuple('classtuple', ['x', 'y', 'z']) #用这个类创建可命名元组对象 namet= classtuple(1,2,3) print (namet.x,namet.y,namet.z)

可命名元组

'''对于可命名元组,Python没有创建类,我们需要自己创建一个类'''import collections'''创建一个类 '''yuanzu=collections.namedtuple('y',['x','y','z'])o=yuanzu(1,2,4)print(o.x) 可命名元组相对简单