布尔上下文中的Python namedtuple

时间:2016-03-24 02:37:43

标签: python boolean namedtuple

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

这同样适用于collections.namedtuple的实例吗?

3 个答案:

答案 0 :(得分:3)

是的,但总的来说,您可能无法看到它发生,因为您为namedtuple中的每个值指定了名称。指定没有名称将允许您创建一个空元组类型,但这样的类型不会非常有用,因为它的实例将始终为空:

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

是。您可以通过检查命名的元组类来查看此内容。

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

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

>>> A = namedtuple('A', ['x'])
>>> A.__len__ == tuple.__len__
True