namedtuple又称为具名元组,因为一般的元组tuple无法对数据进行命名,所以无从知晓元组的意义。这里引入namedtuple来构造一个带名字的元组,就是为解决这类问题。
1.定义
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
typename:元组的名称
field_names:元组中元素的名称
rename:如果元素名称含有python关键字,则必须设置rename=True
2.实例化方法
具名元组有2种实例化方法,下面进行介绍
2.1实例化方法1
from collections import namedtuple
Point = namedtuple("point", ["x", "y", "z"])
p = Point(3, 4, 5)
print(p)
result:
point(x=3, y=4, z=5)
2.2实例化方法2
from collections import namedtuple
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p)
result:
point(x=3, y=4, z=5)
创建一个具名元组,需要两个参数,一个是类名,另一个是类的各个字段名。后者可以是有多个字符串组成的可迭代对象,或者是有空格分隔开的字段名组成的字符串。具名元组可以通过字段名或者位置来获取一个字段的信息。
3.方法属性介绍
3.1 访问成员
from collections import namedtuple
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p.x)
print(p.z)
result:
3
5
3.2 查看字段列表
from collections import namedtuple
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p._fields)
result:
('x', 'y', 'z')
3.3 替换成员值
from collections import namedtuple
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p._replace(x=6, y=8, z=10))
result:
point(x=6, y=8, z=10)
3.4 转换为字典
from collections import namedtuple
Point = namedtuple("point", "x y z")
p = Point(3, 4, 5)
print(p._asdict())
result:
OrderedDict([('x', 3), ('y', 4), ('z', 5)])
4.继承
from collections import namedtuple
Food = namedtuple('food', ['name', 'color'])
bread = Food(name='bread',color='brown')
print(bread)
result:
food(name='bread', color='brown')