Python 布尔上下文中的 namedtuple

Python namedtuple in a boolean context

当在布尔上下文中使用 Python 元组时,当且仅当它不为空时才被视为 True

是否同样适用于 collections.namedtuple 的实例?

是的,但通常您可能永远不会看到它发生,因为您在 namedtuple 中为每个值指定了名称。不指定任何名称将允许您创建一个空的元组类型,但这样的类型不会很有用,因为它的实例总是是空的:

>>> empty = collections.namedtuple("empty", [])
>>> empty()
empty()
>>> bool(empty())
False

理论上是的,但是您不能创建任何有用的 namedtuple 的空实例,因为当您创建 namedtuple 类型时,您必须预先指定元素的数量。因此,拥有一个空的 namedtuple 的唯一方法是拥有一个始终为空的 namedtuple 类型,在这种情况下它没有任何用处。

是的。 你可以通过检查命名元组来看到这一点 class。

一种方法是查看命名元组 class 的源代码,使用 Python 3.3 或更高版本中的 ._sourceverbose=True 选项至 namedtuple()。您将看到命名元组扩展 tuple,并且不会覆盖 __nonzero__()__len__() 方法。这意味着他们使用与 tuple 相同的逻辑,就像你想的那样。

您还可以检查命名元组 class 的 __nonzero____len__ 属性。您会看到它没有定义 __nonzero__ 属性,并且 __len__ 属性与 tuple:

的属性相同
>>> A = namedtuple('A', ['x'])
>>> A.__len__ == tuple.__len__
True