命名元组
命名元组是元组的子类,在一定程度上可以替代类来使用。命名元组适合用来存储数据,所以适合在仅保存数据而不内置其他方法的情况下使用,类似于 Java 中的 POJO(Plain Ordinary Java Object,简单 Java 对象即普通的 Java Bean)。命名元组既可以通过namedTuple.name
来访问元组,还可以通过namedTuple[offset]
来访问元素。
命名元组不是 Python 内置自动支持的类型,使用之前需要使用from collections import namedtuple
来加载命名元组类型。命名元组的使用与元组不同,它不是直接定义的元组类型数据,而是需要先定义一个带有元素命名内容的数据结构,之后再进行数据的初始化。这个数据结构的定义需要两个参数:命名元组的名称和由多个域名组成的字符串,各个域名之间使用空格隔开。
具体参考以下示例,读者可在交互式解释器中观察示例的输出结果。
from collections import namedtuple
Person = namedtuple('Person', 'firstname lastname age') # 定义命名元组
# 通过指定详细参数来初始化命名元组的内容
student = Person('Bill', 'Lynn', 17)
# 或者通过命名参数来初始化命名元组的内容
student = Person(firstname='Bill', lastname='Lynn', age=17)
print(student)
print(student.firstname)
print(student.age)
print(student[1])
# 命名元组还可以使用字典来初始化
parts = {'firstname': 'Kate', 'lastname': 'Lynn', 'age': 18}
student2 = Person(**parts) # **可以将字典中的键和值取出来提供给函数使用,作为后文中会提到的命名参数
命名元素是不可变的,可以通过._replace()
来替换其中的某些域的值来创建一个带有新值的命名元组,例如:student3 = student2._replace(firstname='Lucy')
。命名元组的域一旦确定就不能再进行添加或者删除。