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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pd怎么卸载linux系统,parallels desktop11怎么卸载?parallels desktop11卸载方法

parallels desktop11是一款功能强大的MAC虚拟机软件&#xff0c;用户通过该软件可在mac系统下运行安装windows或Linux操作系统&#xff0c;不过很多时候用户在安装后&#xff0c;由于后期没有使用虚拟机的需求&#xff0c;故此想要将其删除&#xff0c;但是又不知道如何操作&am…

html5中使页面中元素居中

在div中加入 style"text-align: center;

linux下jdk源码安装,Linux JDK 源码安装

一 环境1.1 操作系统[roothost-xxxsoft]# lsb_release -aLSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarchDistributor ID: CentOSDescription: CentOS re…

Python map/reduce

2017-07-31 18:20:59 一、map函数 map()&#xff1a;会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数&#xff0c;返回包含每次 function 函数返回值的iterator,即迭代器&#xff0c;使用list函数可以将之转成列表。 map(f…

linux裸机安装nginx,linux环境下安装nginx步骤 - 进击的乌龟 - 博客园

开始前&#xff0c;请确认gcc g开发类库是否装好&#xff0c;默认已经安装。ububtu平台编译环境可以使用以下指令apt- get install build- essentialapt - get install libtoolcentos平台编译环境使用如下指令安装make&#xff1a;yum -y install gcc automake autoconf libtoo…

Effective C++ 条款21

必须返回对象时。别妄想返回其reference 我们上节分析了对象引用传递的优点&#xff0c;如今说明函数返回引用对象带来的种种坏处。 先来一段代码&#xff1a; class Rational{ public:Rational(int numerator0, int denominator1);…… private:int n, d;friendconst Rationa…

html 中 em

◆px像素&#xff08;Pixel&#xff09;&#xff0c;相对长度单位。像素px是相对于显示器屏幕分辨率而言的。 ◆em是相对长度单位&#xff0c;相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置&#xff0c;则相对于浏览器的默认字体尺寸。 因此用px来定…

c语言命名参数,按照C语言的规定,实参和形参的命名不得重复。

按照羊脂玉具有( )光泽。衡量睡眠质量好坏包括入睡快慢,睡眠深浅,睡后能否解乏(精神情况、规定是否影响日常的工作和生活)三个方面。参和“有药吃而无伙食命亦难保”提示健康普及必须遵循的经济性原则。形参治病与调补都需要辩证,其中区别在于用药与药量的不同。命得重咳嗽除了…

雇佣兵

题目链接&#xff1a;http://noi.openjudge.cn/ch0105/37/ 总时间限制: 1000ms内存限制: 65536kB描述雇佣兵的体力最大值为M&#xff0c;初始体力值为0、战斗力为N、拥有X个能量元素。 当雇佣兵的体力值恰好为M时&#xff0c;才可以参加一个为期M天的战斗期&#xff0c;战斗期结…

织梦的if(!defined('DEDEINC')) exit("Request Error!");解析

1if(!defined(DEDEINC)) exit("Request Error!");细细看看你就会发现,这句代码一般都是在 /include 路径下的php文件里边,为什么 dede 路径下的php文件没有呢&#xff1f;因为 include 路径下的文件是 类文件,也就是 方法文件 ,是以后要被 require_once 引入的文件,M…

阿诺德图像加密c语言,基于Arnold置乱的数字图像加密算法(二)

前文我们介绍了基于Arnold置乱的数字图像加密算法的两种图像置乱变换&#xff0c;今天我们介绍的是另外三种图像置乱变换&#xff1a;基于骑士巡游的图像置乱变换、基于Arnold变换的数字图像置乱和基于仿射变换的置乱变换。一、基于骑士巡游的图像置乱变换所谓骑士巡游&#xf…

python学习(十七) 扩展python

c, c, java比python快几个数量级。 17.1 考虑哪个更重要 开发速度还是运行速度更重要。 17.2 非常简单的途径&#xff1a;Jython和IronPython Jython可以直接访问JAVA标准库。 IronPython中可以直接访问C#标准库。 17.3 编写C语言扩展 扩展Python通常就是扩展CPython&#xff0…

织梦DEDECMS网站留言板提交时验证码错误返回空白页的解决办法

织梦DEDECMS模板网站留言板提交时验证码错误返回空白页的解决办法&#xff1a; 默认情况下&#xff0c;如果我们使用DEDE模板中的默认留言板时&#xff0c;如果留言信息不正确或者输入内容为空时&#xff0c;dedecms系统就会返回一个空白页。 这样的方式很不利于用户体验&#…

android 车辆轨迹,Android自定义view实现车载可调整轨迹线

本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下同事做的view&#xff0c;拿过来做个记录。/****/package com.text.myviewdemo.view;import org.apache.http.conn.routing.RouteInfo.LayerType;import a…

导航栏制作

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>*{margin: 0px; /*盒子外边距*/padding: 0px; /*盒子内边距*/}.NavigatorView {width: 100%;height: 50px;background-color: WhiteSmok…

我的织梦数据库学习

1、织梦中数据库有前缀&#xff0c;在程序会写成#__archives 这样的形式。其中自己要把#__前缀换成自己设置的表前缀&#xff0c;下划线也要注意换掉。

android使用menu需要重写的方法,Android – 正确使用invalidateOptionsMenu()

我一直在关注invalidateOptionsMenu() &#xff0c;我知道它的作用。 但是我想不出这个方法可能有用的任何现实生活中的例子。我的意思是&#xff0c;例如&#xff0c;假设我们想要为ActionBar添加一个新的MenuItem &#xff0c;我们可以从onCreateOptionsMenu(Menu menu)获取菜…