命名元组内命名元组的 Python 语法
Posted
技术标签:
【中文标题】命名元组内命名元组的 Python 语法【英文标题】:Python syntax for namedtuple inside a namedtuple 【发布时间】:2016-07-22 22:54:46 【问题描述】:是否可以在另一个namedtuple
中包含namedtuple
?
例如:
from collections import namedtuple
Position = namedtuple('Position', 'x y')
Token = namedtuple('Token', ['key', 'value', Position])
这给出了一个“ValueError:类型名称和字段名称必须是有效的标识符”
另外,我很好奇是否有更Pythonic 的方法 来构建这样一个嵌套容器?
【问题讨论】:
【参考方案1】:您混淆了两个概念 - namedtuple
的结构和分配给它们的值。结构需要唯一名称列表。值可以是任何值,包括另一个 namedtuple
。
from collections import namedtuple
Position = namedtuple('Position', 'x y')
Token = namedtuple('Token', ['key', 'value', 'position'])
t = Token('ABC', 'DEF', Position(1, 2))
assert t.position.x == 1
【讨论】:
傻我!感谢您的解释和随附的代码。那么,嵌套的命名元组是否被认为是一种好习惯?你知道有什么替代品吗? 这是一个完美的数据结构,其中嵌套了另一个数据结构。如果它对你正在解决的问题是正确的,为什么不呢?你只需要记住它是一个数据结构,而不是一个类。对于复杂的对象,通常最好使用适当的方法创建一个类。以上是关于命名元组内命名元组的 Python 语法的主要内容,如果未能解决你的问题,请参考以下文章