Python中的named tuples是什么?
当我们在Python编程中使用元组时,通常要用索引来访问每个元素。 但是,对于大型元组,使用索引会导致代码的可读性变差和易错。 这是Python中的“named tuples”变得非常有用,它允许我们为元组中的每个元素指定名称。
阅读更多:Python 教程
什么是“named tuples”?
“named tuples”是一个Python内置的数据类型模块collections中的一个类。 它是一个元组子类,它让你按名称而不是索引来访问元组中的元素,这样我们可以在编写和使用代码时更容易理解。
如何定义“named tuples”?
使用命名元组类工厂函数,nametuple()来创建一个命名元组类。 命名元组类由类名和字段名组成,类名用于给类型命名,而字段名用于指定每个字段。
以下是一个创建命名元组的示例代码。
from collections import namedtuple
# 创建一个新的Point2D类,该类具有两个命名字段,x和y。
Point2D = namedtuple('Point2D', ['x', 'y'])
现在该类可以像普通的Python类一样将其实例化。 然而,这里的元素可以通过属性名_x和_y而不是索引访问。
# 创建Point2D实例
p1 = Point2D(1, 2)
# 通过属性名来访问元素
print(p1.x) # 输出1
print(p1.y) # 输出2
如果我们想要为Point2D类在创建实例时指定所有参数,则需要使用* args。
# Python 3.7
p2 = Point2D(*[1,2])
如何使用“named tuples”?
命名元组可以用于任何需要元组的地方,并可以像有序元组一样进行索引。 除此之外,还可以通过字段名称来访问元素值,这使得代码变得更加易于理解。
p3 = Point2D(x=3, y=4)
print(p3[0]) # 输出3
print(p3.x) # 输出3
print(p3[1]) # 输出4
print(p3.y) # 输出4
在实际应用中,命名元组类可以更好地描述和记录具有多个属性的对象。 这意味着它们可以安全地用作字典键,并且可以方便地进行比较和排序操作。
# 返回一个符合人类直觉顺序的坐标点对象列表
coordinates = [Point2D(3, 4), Point2D(2, 3), Point2D(1, 2)]
coordinates_sorted = sorted(coordinates)
print(coordinates_sorted) # 输出[Point2D(x=1, y=2), Point2D(x=2, y=3), Point2D(x=3, y=4)]
另一个有用的特性是使命名元组与数据文件更兼容。 此外,命名元组也可以用作程序中的返回类型。
def calculate_dimensions(x, y):
"""从给定的x和y计算对角线长度和面积"""
Diagonal = ((x ** 2) + (y ** 2)) ** 0.5
Area = x * y
# 返回一个命名元组,其中包含计算的对角线长度和区域值
Dimensions = namedtuple('Dimensions', ['Diagonal', 'Area'])
# 实例化并返回命名元组
return Dimensions(Diagonal, Area)
# 调用函数并访问返回命名元组的字段
dimensions = calculate_dimensions(3, 4)
print(dimensions.Diagonal) # 输出5.0
print(dimensions.Area) # 输出12
结论
命名元组是元组的改进版本,它在Python中经常被使用,尤其是在需要处理许多具有多个属性的对象时。 它们的主要优点包括适用于所有元组操作,可读性好,易于维护和记录,以及支持像字典一样的操作。