本文介绍了python的namedtuple数据类型。
tuple的不足
Python的tuple类型可通过下标访问,但存在两个不足:
- 可通过下标访问,但是不能通过有意义的名字访问
- tuple为特设(ad-hoc)类型,没有约束条件,特别是在对tuple做比较操作时,没有关于长度、每个值在哪个位置约束
namedtuple的特点
namedtuple在保留tuple特性的同时,可弥补以上两个不足。
namedtuple的特点:
- 不可修改:和tuple一样,值一旦写入就不可修改
- 每个值都可以通过可读性好的标识符(需要自己定义)去访问,可以不用记忆每个下标是干嘛的,增强代码的可读性。
namedtuple示例
这个例子展示了如何定义namedtuple,以及如何访问namedtuple里的元素
1 | from collections import namedtuple |
下面这个例子展示了namedtuple和tuple的相似性1
2
3
4
5
6
7
8
9
10
11
12
13
14
15from collections import namedtuple
Car = namedtuple('Car', 'color, miles')
car = Car('red', 34)
# 赋值
color, miles = car
print(color, miles) # ('red', 34)
# 通过下标访问
print(car[0], car[1]) # ('red', 34)
# 转化为tuple
print(tuple(car)) # ('red', 34)
从如上例子可以看出,namedtuple在日常使用中,和tuple最大的变化就是可以如何dict一样,通过有意义的标识符进行访问,其他的操作仍然和tuple保持一致。
namedtuple的妙用
namedtuple利用_make
方法,在从文件中读取内容,和从数据库中读取内容时,可以巧妙的和列名结合起来。
1 | mployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade') |