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

#!/usr/bin/python3import collectionsMyTupleClass = 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/python3import collectionsPerson=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)

转载于:https://www.cnblogs.com/chenlin163/p/7259061.html

Python namedtuple(命名元组)使用实例相关推荐

  1. python namedtuple用法_Python namedtuple(命名元组)使用实例

    namedtuple对象就如它的名字说定义的那样,你可以给tuple命名,具体看下面的例子:import collections Person=collections.namedtuple('Pers ...

  2. Python namedtuple ——具名元组

    本文主要介绍namedtuple类型对象的创建以及对应属性的访问. namedtuple位于Python内置模块collections,属于tuple子类,类似于C/C++中的struct结构体,na ...

  3. Python中的命名元组(namedtuple)到底是什么东西?干嘛用的?

    Python中有一种特殊的元组叫做命名元组,英文名叫namedtuple. 为什么要用命名元组呢? 思考下面的问题: 如何设计数据结构承载一个五维的数据,如一个学生的基本信息? 方法有二: 1. Py ...

  4. python namedtuple (命名元组)用法详解

    Python元组的升级版本 – namedtuple(具名元组) 因为元组的局限性:不能为元组内部的数据进行命名,所以往往我们并不知道一个元组所要表达的意义,所以在这里引入了 collections. ...

  5. python collections模块(数据结构常用模块)计数器Counter 双向队列deque 默认字典defaultdict 有序字典OrderedDict 可命名元组namedtuple

    collections 模块----Python标准库,是数据结构常用模块 常用类型有: 计数器(Counter) 双向队列(deque) 默认字典(defaultdict) 有序字典(Ordered ...

  6. python命名元组

    Python的元组不能为元组内部的数据进行命名,而 collections.namedtuple 可以来构造一个含有字段名称的元组类,命名元组可以通过逗号+字段名来获取元素值: collections ...

  7. python中元组用符号什么表示_Python中的“命名元组”是什么?

    命名的元组基本上很容易创建,轻量级的对象类型.可以使用像变量引用或标准元组语法的对象来引用命名的元组实例.它们可以类似于struct或其他常见的记录类型使用,除了它们是不可变的.它们是在Python ...

  8. Python 3.7.1 中 namedtuple 具名元组基本用法详解

    Python 3.7.1 中 namedtuple 具名元组基本用法详解 转载请注明出处:https://blog.csdn.net/jpch89/article/details/84645251 文 ...

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

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

最新文章

  1. 线性回归api初步使用
  2. 3D演示帮你一眼看懂线性规划问题,这篇可视化教程火了
  3. 2021-04-24 Python 最小二乘法求解线性回归模型
  4. Vue2.0 --- vue-cli脚手架中全局引入JQ
  5. 【Leetcode_easy】821. Shortest Distance to a Character
  6. 3.CM3内核架构-寄存器
  7. C++交换两个数组的前n个字节
  8. atitit.窗体静听esc退出本窗体java swing c# .net php
  9. DSP实验二c语言程序,实验1.2:编写一个以C语言为基础的DSP程序
  10. 免安装mysql环境配置、完全卸载和无法启动问题详解
  11. gps模拟器 matlab,基于Matlab/Simulink的数字中频GPS信号软件模拟器
  12. 思维导图制作工具BLUMIND 小巧免激活 免安装 仅2M
  13. 怎么使用电脑打开手机分享的vcf联系人文件
  14. Java查询Mysql数据库时区问题(相差13/14)个小时
  15. mysql straight join_在MySQL中使用STRAIGHT_JOIN的教程
  16. 用python实现阴阳师简单挂机脚本
  17. 逼自己一把,你就优秀了 【转】
  18. 每一款都很能打 苏宁小Biu连发新品布局IoT
  19. workbench应力应变曲线_ansys workbench中的7种应力结果如何理解
  20. 快速分析德邦快递走件信息,并筛选代收的单号

热门文章

  1. C++ 高级篇(二)—— 名空间 (Namespaces)
  2. React开发(282):公共组件可以提升一下文件层级
  3. 前端学习(3316):connect
  4. [css] css的加载会阻塞js运行吗?为什么?
  5. [css] 用css画出一把刻度尺
  6. 工作296:el-table使用
  7. 工作281:时间戳转换问题
  8. 工作90:富文本编辑器使用篇wangedit
  9. “约见”面试官系列之常见面试题之第八十六篇之nexttick(建议收藏)
  10. 前端学习(2043)vue之电商管理系统电商系统之优化web.config.js的配置文件