【发布时间】:2015-08-12 02:46:34
【问题描述】:
我们像这样使用namedtuple:
>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p=Point(1,2)
>>> p.x
1
我发现namedtuple 的第一个参数似乎没用,因为:
首先,我们不能使用它(例如创建实例):
>>> from collections import namedtuple
>>> P = namedtuple('Point', ['x', 'y'])
>>> p = Point(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Point' is not defined
其次,它似乎没有限制(例如,我们不必使其唯一):
>>> P1 = namedtuple('Point', ['x', 'y'])
>>> P2 = namedtuple('Point', ['x', 'y', 'z'])
>>> p1 = P1(1,2)
>>> p2 = P2(1,2,3)
>>> p1
Point(x=1, y=2)
>>> p2
Point(x=1, y=2, z=3)
我没有从manual 或谷歌搜索中找到解释。有一个相关的问题here,但它没有回答为什么namedtuple 需要第一个参数以及它如何使用或何时需要。
【问题讨论】:
-
想一想——如果类没有有
__name__,repr会是什么样子?如果您设置ClassName = namedtuple('ClassName', ...),那么您可以使用例如eval重新创建给定的实例。 -
你认为namedtuple的名字部分是从哪里来的?
-
@jonrsharpe 我之前对类名有一个误解,我认为它们应该是唯一的。
-
@WKPlus 他们通常应该是,是的,但不是必需。
标签: python namedtuple python-collections