Python中的具名元组(NamedTuple) 扩展
具名元组(NamedTuple)是 Python collections
模块中的一个工厂函数,用于创建类似于字典的不可变对象,具有字段名称和索引访问的功能。它们的使用既方便又高效,特别适合需要用名称访问数据的场景。
定义和使用
1. 定义具名元组
使用 namedtuple()
创建一个具名元组。
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
2. 实例化具名元组
可以像类一样创建具名元组的实例。
p = Point(11, 22)
3. 访问字段
可以通过名称或索引访问字段。
print(p.x) # 输出: 11
print(p[1]) # 输出: 22
优势
- 可读性高:字段名称使代码更易读。
- 不可变性:像普通元组一样,具名元组也是不可变的。
- 内存效率:相比字典,占用内存更少。
示例
以下是一个具体的示例,展示了如何定义和使用具名元组:
from collections import namedtuple
# 创建具名元组类
Person = namedtuple('Person', ['name', 'age', 'gender'])
# 创建实例
person = Person(name='John', age=30, gender='Male')
# 访问字段
print(person.name) # 输出: John
print(person.age) # 输出: 30
print(person.gender) # 输出: Male
具名元组在需要结构化、可读性高的数据存储和访问时特别有用。
扩展功能
_fields
属性
_fields
属性返回具名元组的所有字段名称。
print(person._fields) # 输出: ('name', 'age', 'gender')
_asdict
方法
_asdict
方法将具名元组转换为字典。
print(person._asdict()) # 输出: {'name': 'John', 'age': 30, 'gender': 'Male'}
_replace
方法
_replace
方法创建一个新的具名元组,替换指定字段的值。
print(person.age) # 输出: 30
person = person._replace(age=40)
print(person._asdict()) # 输出: {'name': 'John', 'age': 40, 'gender': 'Male'}
print(person.age) # 输出: 40
代码示例
from collections import namedtuple
# 创建一个名为 'Person' 的具名元组类
Person = namedtuple('Person', ['name', 'age', 'gender'])
# 创建一个 Person 对象
person = Person(name='Bob', age=30, gender='male')
# 访问字段
print(person.name) # 输出: Bob
print(person.age) # 输出: 30
print(person.gender) # 输出: male
# 通过索引访问
print(person[0]) # 输出: Bob
print(person[1]) # 输出: 30
print(person[2]) # 输出: male
# 获取所有字段名称
print(person._fields) # 输出: ('name', 'age', 'gender')
# 将具名元组转换为字典
print(person._asdict()) # 输出: {'name': 'Bob', 'age': 30, 'gender': 'male'}
print(type(person._asdict())) # 输出: <class 'dict'>
# 使用 _replace 方法替换字段值
print(person.age) # 输出: 30
person = person._replace(age=40)
print(person._asdict()) # 输出: {'name': 'Bob', 'age': 40, 'gender': 'male'}
print(person.age) # 输出: 40
具名元组提供了一种简单而高效的方式来创建结构化数据,并且使用起来非常方便。理解并使用这些特性,可以使代码更具可读性和维护性。
License:
CC BY 4.0