Python namedtuple ——具名元组

本文主要介绍namedtuple类型对象的创建以及对应属性的访问。

        namedtuple位于Python内置模块collections,属于tuple子类,类似于C/C++中的struct结构体,namedtuple中每个元素具有一个名称。

namedtuple类型声明

collections.namedtuple(typename, field_names, verbose=False, rename=False)

参数意义:
        typename:    字符串,元组名称
        field_names:由元组中元素的名称,可选类型为:字符串列表或空格分隔开字符串或逗号分隔开字符串
        verbose:        默认就好
        rename:        如果元素名称中含有python的关键字,则必须设置为rename=True
后两个参数采取默认值就好。

1. 调用流程

【1】声明一个namedtuple,此时只是相当于声明出了一种类型,并未具体创建实例

from collections import namedtuple

Student_Class = namedtuple("Student", ["name", "sex", "age"])

【2】实例化,此时真正创建出实例化对象

student = Student_Class("alpha", "male", 15)
print(student)
输出结果:Student(name='alpha', sex='male', age=15)
# 访问元素
student.name ==> "alpha"
student.sex  ==> "male"
student.age  ==> 15

在这里插入图片描述
在创建实例化对象时使用变量名,即Student_Class,而类型名称为Student,因此可以将变量名和类型名统一,后续使用无需区分。

type(student)         ==> __main__.Student
Student_Class.__mro__ ==> (__main__.Student, tuple, object)

2. 参数field_names不同类型时具名元组的声明

# 第一种:field_names为空格分隔开字符串
Student_Class = namedtuple("Student", "name sex age")
# 第二种:field_names为逗号分隔开字符串
Student_Class = namedtuple("Student", "name, sex, age")
# 第三章:field_names为字符串列表
Student_Class = namedtuple("Student", ["name", "sex", "age"])

3. 具名元组常用属性

主要包括:
       _fields:                返回一个元组,包含所有字段的名称
       _make(iterable):  传入可迭代对象创建具名元组实例化对象
       _replace(**kwds):修改具名元组中某一个元素值
       _asdict():              将具名元组对象转换成OrderedDict

以具体实例说明

(1)创建具名元组对象
In [1]: from collections import namedtuple
In [2]: Student_Class = namedtuple("Student", ["name", "sex", "age"])
In [3]: student = Student_Class(name="alpha", sex="male", age=20)
(2)_fields属性: 返回一个元组,包含所有的字段名称
In [4]: type(student._fields)
Out[4]: tuple
In [5]: student._fields
Out[5]: ('name', 'sex', 'age')
(3)_make(iterable): 传入可迭代对象创建具名元组实例化对象
In [6]: student = Student_Class._make(["beta", "female", 21])
In [7]: student
Out[7]: Student(name='beta', sex='female', age=21)
(4)_replace(**kwds):修改具名元组中某一个元素值
In [8]: student = student._replace(age=50)
In [9]: student
Out[9]: Student(name='beta', sex='female', age=50)
(5)_asdict():将具名元组对象转换成OrderedDict
In [10]: student.as_dict()
Out[10]: OrderedDict([('name', 'beta'), ('sex', 'female'), ('age', 50)])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值