python命名元组namedtuple_Python命名元组--命名元组,Pythonnamedtuple,具名

本文主要介绍

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)])

你可能感兴趣的:(python命名元组namedtuple_Python命名元组--命名元组,Pythonnamedtuple,具名)