这里namedtuple函数返回的是一个名为typename的tuple子类,这个子类可以通过field_names访问子类的tuple成员,比tuple有更强大的功能。
1:tuple通过item的index访问数据,或者通过index访问其item
student=('math','chinese','english')
print(student[1])
print(student.index('math'))
chinese
0
2:namedtuple collections模块的namedtuple子类不仅可以使用item的index访问item,还可以通过item的name(看成属性)进行访问。可以将namedtuple理解为c中的struct结构,其首先将各个item命名,然后对每个item赋予数据。
这样一来,我们用namedtuple
可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来访问,使用十分方便。
from collections import namedtuple
# 定义一个namedtuple类型User,并包含'math', 'chinese', 'english'属性。
User = namedtuple('student', ['math', 'chinese', 'english'])
# 创建一个User对象
user = User(math=90, chinese=85, english=80)
# 也可以通过一个list来创建一个User对象,这里注意需要使用"_make"方法
user = user._make([90, 60, 70])
print(user)
# 获取用户的属性
print(user.math)
print(user.chinese)
print(user.english)
# 修改对象属性,注意要使用"_replace"方法
user = user._replace(math=100)
print(user)
# 将User对象转换成字典,注意要使用"_asdict"
print(user._asdict())
输出如下
student(math=90, chinese=60, english=70)
90
60
70
student(math=100, chinese=60, english=70)
OrderedDict([('math', 100), ('chinese', 60), ('english', 70)])