码迷,mamicode.com
首页 > 编程语言 > 详细

Python namedtuple

时间:2015-09-27 08:48:12      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

我们都知道Python中的tuple是一个非常高效的集合对象,但是我们只能通过索引的方式访问这个集合中的元素,比如下面的代码:

1 Bob=(bob,30,male) 
2 printRepresentation:,Bob
3 
4 Jane=(Jane,29,female)
5 printField by index:,Jane[0]
6 
7 for people in[Bob,Jane]:
8     print"%s is %d years old %s" % people

 

其中Jane[0]就是通过索引访问的一种方式。但是如果tuple中的元素很多的时候操作起来就比较麻烦,有可能会由于索引错误导致出错。我们今天介绍的namedtuple对象就如它的名字说定义的那样,你可以给tuple命名,具体用户看下面的例子:

 1 import collections
 2 
 3 Person=collections.namedtuple(P,name age gender)
 4 printType of Person:,type(Person)
 5 
 6 Bob=Person(name=B,age=30,gender=male)
 7 printRepresentation:,Bob
 8 
 9 Jane=Person(name=J,age=29,gender=female)
10 print Field by Name:,Jane.name
11 
12 for people in[Bob,Jane]:
13     print"%s is %d years old %s" % people 

 

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

1 Type of Person: <type type>
2 Representation: P(name=B, age=30, gender=male)
3 Field by Name: J
4 B is 30 years old male
5 J is 29 years old female

 

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

1 import collections
2 
3 with_class=collections.namedtuple(Person,name age class gender,rename=True)
4 print with_class._fields
5 
6 two_ages=collections.namedtuple(Person,name age gender age,rename=True)
7 print two_ages._fields 

 

其输出结果为:

1 (name, age, _2, gender)
2 (name, age, gender, _3)

 

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

Python namedtuple

标签:

原文地址:http://www.cnblogs.com/yinguo/p/4841798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!