2016-03-24 34 views

回答

2

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

+0

所以,澄清,有用的'namedtuple's总是truthy? – user200783

+0

@PaulBaker:是的,因为他们永远都是非空的。 – BrenBarn

3

是的,但一般情况下,您可能永远不会看到它发生,因为您为namedtuple中的每个值指定名称。没有指定名称将允许您创建一个空的元组类型,但是这种类型的就不会是非常有用的,因为它的情况下,将总是为空:

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

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

一种方法是使用Python 3.3或更高版本中的._sourcenamedtuple()中的verbose=True选项来查看指定元组类的源代码。您会看到名称元组扩展为tuple,并且不会覆盖__nonzero__()__len__()方法。这意味着他们使用与您想象的相同的逻辑tuple

您还可以检查指定元组类的__nonzero____len__属性。你会看到,它已经没有__nonzero__属性定义,那__len__属性是一样的一个tuple

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