详解Python namedtuple的优点

  • Post category:Python

首先来介绍一下Python中的namedtuple。

什么是Python中的namedtuple?

Python中的namedtuple为元组增加了一些字段名称,使得其在使用时更加方便和易读。具体来说,它是一个工厂函数,用于创建一个具有字段名和固定数量字段的元组子类。

namedtuple是Python标准库中collections模块下的一个类型,使用namedtuple可以创建类似于元组的数据类型,这些数据类型具备元组的固定大小和性能,但具备命名的属性。

namedtuple的优点

  1. 直接使用属性名访问元素,方便易懂

namedtuple虽然是元组子类,但是它的每个字段都有对应的名称,可以通过object.field的方式直接访问元素,减小了类似于下标访问的错误可能性。

  1. namedtuple具备元组的固定大小和性能

与元组类似,namedtuple的大小是固定的,因此它在存储和传递数据时具有优势。

  1. 更易使用的API

namedtuple除了继承了元组的所有特性外,还可以像普通的类一样定义方法属性,因此可以更轻松地自定义方法和属性来丰富自己的数据结构。

namedtuple 的使用方法

  • 安装collections模块

如果您使用的是 Python3 版本,那么无需安装任何模块,namedtuple 已被集成到 Python3 标准库中。如果您使用 Python2 版本,需要使用 pip 工具安装模块。示例代码如下:

pip install collections # Python2版本
  • 使用namedtuple

使用namedtuple前需要从collections模块中导入该类,示例代码如下:

from collections import namedtuple
  • 创建namedtuple

namedtuple语法类似于class的语法,需要定义一个类名和一些字段,示例代码如下:

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)

在此示例中,我们创建了一个名为Point的namedtuple,具有xy两个字段。可以看到,在用namedtuple创建对象时,需要提供字段所对应的参数。

  • 访问namedtuple元素

通过实例化namedtuple后,可以直接访问其元素,示例代码如下:

print(p.x)
print(p.y)

上面的两个语句分别打印12

示例说明

下面是两个简单的namedtuple应用示例。

  • 示例一:使用namedtuple表示坐标点
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])

p = Point(1, 2)

print(p.x)
print(p.y)

在此示例中,我们创建了Point数据类型,该数据类型具有xy两个字段,可以用于表示平面上的一个坐标点。我们创建了一个名为p的namedtuple对象,将其x坐标和y坐标分别初始化为1和2,最后通过直接访问字段方式打印出x和y的值。

  • 示例二:使用namedtuple表示公司员工
from collections import namedtuple

Employee = namedtuple('Employee', ['name', 'age', 'title'])

emp1 = Employee('Tom', 30, 'Engineer')
emp2 = Employee('Alice', 25, 'Manager')

print(emp1.name, emp1.age, emp1.title)
print(emp2.name, emp2.age, emp2.title)

在此示例中,我们创建了Employee数据类型,该数据类型具有nameagetitle三个字段,可以用于表示公司员工的相关信息。我们创建了两个名为emp1emp2的namedtuple对象,分别表示两位员工的信息。最后,我们通过直接访问字段方式打印出两位员工的姓名、年龄、职位信息。