Python中的命名元组是什么?

Python的命名元组是一个非常简单但有趣的特性,可以让开发人员的生活变得更轻松。它们是collections模块的一部分,与普通元组非常相似,主要区别在于命名元组中存储的值可以使用字段名而不是索引来访问。

例如,二维平面上的一个点可以用两个坐标表示。在普通元组中,这些值将通过索引([0][1])来访问,但如果我们定义一个命名元组Point,我们可以使用xy来访问它们(如果需要,我们仍然可以使用索引):

from collections import namedtuple

# 普通元组
p = (2, 4) # p[0] = 2, p[1] = 4

# 命名元组
Point = namedtuple('Point', 'x y')
q = Point(3, 5) # q.x = 3, q.y = 5

除了代码的可读性增加之外,命名元组还提供了一些其他的便利功能。首先,它们允许通过defaults可迭代参数指定默认值。其次,它们具有自动重命名重复或无效字段的能力,通过rename布尔参数实现。最后,它们甚至提供了一种方便的选项,可以将字段名指定为列表或逗号/空格分隔的字符串。

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y', 'z'], defaults=[1])
a = Point(1, 1, 0) # a.x = 1, a.y = 1, a.z = 0

# 使用默认值`z`
b = Point(2, 2) # b.x = 2, b.y = 2, b.z = 1(默认值)

你可能会问:“有什么陷阱吗?”嗯,似乎没有!在语法方面,与字典的明显相似之处似乎没有更深入的联系,因为命名元组实例没有每个实例的字典,这意味着它们需要与普通元组一样多的内存。