Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';namedtuple的第一个参数用于什么?_Python_Namedtuple_Python Collections - Fatal编程技术网

Python 什么';namedtuple的第一个参数用于什么?

Python 什么';namedtuple的第一个参数用于什么?,python,namedtuple,python-collections,Python,Namedtuple,Python Collections,我们使用namedtuple如下: >>> from collections import namedtuple >>> Point = namedtuple('Point', ['x', 'y']) >>> p=Point(1,2) >>> p.x 1 我发现namedtuple的第一个参数似乎没用,因为: 首先,我们不能使用它(例如创建实例): 我没有通过谷歌搜索或从网站上找到解释。有一个相关的问题,但它没有回答为什么

我们使用
namedtuple
如下:

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p=Point(1,2)
>>> p.x
1
我发现
namedtuple
的第一个参数似乎没用,因为:

首先,我们不能使用它(例如创建实例):


我没有通过谷歌搜索或从网站上找到解释。有一个相关的问题,但它没有回答为什么
namedtuple
需要第一个参数,以及如何使用它,或者何时需要它。

它设置生成的类的名称:

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point
<class '__main__.Point'>
>>> Point = namedtuple('Foobar', ['x', 'y'])
>>> Point
<class '__main__.Foobar'>
您通常通过保持每个模块的名称唯一来避免这种情况,但您不必这样做

该名称用于调试目的;在回溯和
repr()
output中,会显示名称,以帮助您确定使用了什么类


对于Python来说,生成的类是否重用名称并不重要。它对
pickle
模块不起作用;如果需要能够pickle命名的元组类实例,请确保选择的名称与全局名称相匹配,
pickle
以后可以通过该名称再次加载它。但是,如果重新使用名称对您来说是有意义的,或者不会积极阻碍您的代码开发或调试任务,那么请务必重用该名称或选择您喜欢的任何内容。

想想看——如果该类没有
\uu名称
,那么
repr
会是什么样子?如果您设置了
ClassName=namedtuple('ClassName',…)
,则可以使用例如
eval
来重新创建给定实例。您认为namedtuple中的名称部分来自何处?@jornsharpe我以前对类名有误解,我认为它们应该是唯一的。@WKPlus它们通常应该是,是的,但是当我定义两个同名的命名元组时,它工作得很好,为什么?@WKPlus为什么不呢?@WKPlus:我也可以创建多个同名的类。或功能。出于调试目的和清晰性,您希望保持它们的唯一性,但不强制执行。两个同名但包含不同属性的命名元组仍然可以工作,这有意义吗?@WKPlus:如果对您作为开发人员来说没有意义,那么不要使用重复的名称。但在某些情况下,根据需要生成命名的元组类非常容易,而且名称并不重要,因此为每个类生成新的唯一名称也没有意义。
>>> 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)
>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point
<class '__main__.Point'>
>>> Point = namedtuple('Foobar', ['x', 'y'])
>>> Point
<class '__main__.Foobar'>
>>> class Foo(object):
...     pass
... 
>>> Bar = Foo
>>> class Foo(object):
...     pass
... 
>>> Bar
<class '__main__.Foo'>
>>> Foo
<class '__main__.Foo'>