当在布尔上下文中使用Python元组时,当且仅当它不为空时才会被视为True
。
这同样适用于collections.namedtuple
的实例吗?
答案 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