为什么namedtuple+namedtuple返回一个常规元组?

问题描述 投票:0回答:1
from collections import namedtuple

foo_a = namedtuple("foo_a", ["a1", "a2", "a3"])
foo_b = namedtuple("foo_b", ["b1", "b2", "b3"])

a = foo_a(1, 2, 3)
b = foo_b(4, 5, 6)

a + b        # -> (1, 2, 3, 4, 5, 6)
type(a + b)  # -> tuple

namedtuples 的 add 方法似乎会返回一个元组,但我找不到此行为的文档。这种行为对我来说似乎很奇怪。

python namedtuple
1个回答
0
投票

Python 的命名元组经过精心构建,因此它们是元组的子类 - 这意味着它们在每个可能的机会中都会像元组一样表现。当然,最常用的是通过数字索引而不是通过命名属性获取其值的能力:这使得它们能够在以前需要元组将不相关的值绑定在一起的地方“插入”替换.

使用“+”来连接元组,或者将元组连接到其他可迭代对象是明确定义的。另一方面,连接命名元组的命名属性不仅没有意义,因为如果生成的实体是“双长度命名元组”且每个字段重复两次,则会导致名称冲突。

更改行为以递归地添加每个字段,除了对大多数命名元组不一定有意义之外,还会破坏命名元组与元组的兼容性。就像在尝试将命名元组添加到任何其他序列时简单地引发

TypeError
一样:因为命名元组 is 是一个元组,所以预期的结果对象也是一个元组。

考虑到这些要点,我认为这种行为实际上并没有什么令人惊讶的。

© www.soinside.com 2019 - 2024. All rights reserved.