namedtuple 的第一个参数是做啥用的?

     2023-02-16     175

关键词:

【中文标题】namedtuple 的第一个参数是做啥用的?【英文标题】:What's the first argument of namedtuple used for?namedtuple 的第一个参数是做什么用的? 【发布时间】: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 他们通常应该是,是的,但不是必需 【参考方案1】:

它设置生成的类的名称:

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point
<class '__main__.Point'>
>>> Point = namedtuple('Foobar', ['x', 'y'])
>>> Point
<class '__main__.Foobar'>

全局变量中的Point 名称只是对生成类的引用,类本身 需要有一个名称。不能从分配对象的变量中获取名称,因为该类是生成的first,并且仅在单独的步骤中分配了then(在namedtuple() 调用之后返回)。

它不需要唯一,就像使用class时类名不需要唯一一样:

>>> class Foo(object):
...     pass
... 
>>> Bar = Foo
>>> class Foo(object):
...     pass
... 
>>> Bar
<class '__main__.Foo'>
>>> Foo
<class '__main__.Foo'>

您通常通过保持每个模块的名称唯一来避免这种事情,但您没有必须这样做。

该名称用于调试目的;在 tracebacks 和 repr() 输出中,会显示名称以帮助您确定所使用的类。

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

【讨论】:

但是当我定义两个具有相同名称的命名元组时,它工作正常,为什么? @WKPlus 为什么不会呢? @WKPlus:我也可以创建多个具有相同名称的类。或功能。出于调试目的和清晰性,您希望它们保持唯一性,但这不是强制执行的。 两个同名但包含不同属性的命名元组,它仍然可以工作,这有意义吗? @WKPlus:如果对您作为开发人员来说它没有意义,那么不要使用重复的名称。但在某些情况下,按需生成命名元组类很容易,并且名称无关紧要,因此为每个类生成新的唯一名称也没有意义。

SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做啥用的?

】SetPixelFormat()中的PIXELFORMATDESCRIPTOR参数是做啥用的?【英文标题】:WhatisthePIXELFORMATDESCRIPTORparameterinSetPixelFormat()usedfor?SetPixelFormat()中的PIXELFORMATDESCRIPTOR参数是做什么用的?【发布时间】:2010-03-2918:51:16【问题描述】:通常在设... 查看详情

predicateWithBlock: 中块的 bindings 参数是做啥用的?

】predicateWithBlock:中块的bindings参数是做啥用的?【英文标题】:WhatisthebindingsparameterfortheblockinpredicateWithBlock:usedfor?predicateWithBlock:中块的bindings参数是做什么用的?【发布时间】:2011-09-1914:10:01【问题描述】:+[NSPredicatepredicateWithB... 查看详情

Tensorflow variable_scope 中的 partitioner 参数是做啥用的?

...布时间】:2018-04-2014:51:31【问题描述】:tf.variable_scope有一个partition 查看详情

Symfony2 中的 SECRET 参数是做啥用的?

】Symfony2中的SECRET参数是做啥用的?【英文标题】:WhatistheSECRETparameterinSymfony2usedfor?Symfony2中的SECRET参数是做什么用的?【发布时间】:2016-04-2512:30:45【问题描述】:谁能告诉我Symfony2中parameters.yml的SECRET参数是什么?【问题讨论... 查看详情

maven.multiModuleProjectDirectory 是做啥用的?

...描述】:我在SO和Maven邮件列表上看到了很多关于设置env参数maven.multiModuleProjectD 查看详情

渠道是做啥用的?

...些Go代码时,我发现了以下内容:ch:=make(chanint)我查阅了一个在线教程,了解GoChannels的工作原理:https://tour.golang.org/concurrency/2但我觉得这个例子不清楚。谁能给我一个简单的解释和一个使用频道的例子?【问题 查看详情

sqlplus 中的 -s 选项是做啥用的?

...s选项[sqlplus-s]。提前致谢。【问题讨论】:这实际上不是一个shell问题。命令行参数在任何类型的调用中的行为方式都相同,即使不涉及命令:您可以从C(即e 查看详情

cursor.setNotificationUri() 是做啥用的?

...entProviders和来自thistutorial的加载器我是怎么看的:我们有一个Activity和ListView 查看详情

UITextInput 的 Tokenizer,它是做啥用的?

...【发布时间】:2013-05-0210:17:12【问题描述】:我正在实现一个自定义文本输入视图,它采用UITextInput协议,当使用UITextView时,双击一个单词使单词被选中,我想知道UITextInput如何使用它 查看详情

MAKEWORD 是做啥用的?

...MAKEWORD(2,2)。我在MSDN中读到它“通过连接指定的值来创建一个WORD值。”问题是,WORD不是类似于无符号整数的东西,为什么我需要执行诸如使用MAKEWORD()之类的奇怪过程?【问题讨论】:【参考方案1】:宏需 查看详情

Iterable 接口是做啥用的?

...主要好处是它有自己的语法糖:enhancedfor-loop。如果你有一个Iterable&lt;Strin 查看详情

测试和设置是做啥用的?

...它还有什么其他用途?【问题讨论】:【参考方案1】:一个很好的例子是“增量”。假设有两个 查看详情

eq是做啥用的,它和压缩一样吗.如果不一样那压缩是做啥用的~

...增强,体现在声音上就是能够让音箱中放出的声音稳定在一个设定的范围,尤其在大失真度的声音中,压缩效果器能够使声音更均匀,防止音箱损坏。参考技术Aeq是对各频率分段的声音大小做出控制压缩是控制范围不超标的过滤... 查看详情

pyproject.toml 文件是做啥用的?

...p.py,所以我无法安装它pipinstall-e<folder>相反,该包有一个pyproject.toml文件,该文件似乎与se 查看详情

JdbcDaoSupport 是做啥用的?

】JdbcDaoSupport是做啥用的?【英文标题】:WhatisJdbcDaoSupportusedfor?JdbcDaoSupport是做什么用的?【发布时间】:2014-02-2612:01:42【问题描述】:在Spring中,当我们插入数据库时​​,我们可以使用JdbcDaoSupport,也可以不使用。我的问题... 查看详情

sigaddset 是做啥用的?

】sigaddset是做啥用的?【英文标题】:Whatissigaddsetusedfor?sigaddset是做什么用的?【发布时间】:2014-12-0111:37:41【问题描述】:我有这段代码,我使用sigaddset和sigaction。但是,如果我评论segaddset结果是一样的structsigactionact;act.sa_handl... 查看详情

Visual Studio 中的“stdafx.h”是做啥用的?

...问题描述】:我在VisualStudio2010中启动项目时会自动生成一个名为stdafx.h的文件。我需要制作一个跨平台的C++库,所以我不/不能使用这 查看详情

`>&2` 是做啥用的? [复制]

...1-2819:30:09【问题描述】:我在将以下命令的结果传递给另一个的上下文中询问:echo"foo"|tee>&2【问题讨论】:【参考方案1】:使用&gt;&amp;2,您将输出发送到标准错误而不是标 查看详情