NamedTuple声明并在一行中使用

时间:2014-10-16 12:57:00

标签: python namedtuple

我想存储维namedtuple (x, y)。我只需要在整个程序中使用一次。

我能做到:

Dimension = namedtuple('Dimension', ['x', 'y'])
dim = Dimension(2, 3)

但是,因为我确定这是我在整个程序中唯一需要的Dimension,所以我想知道我是否可以将它变成一个单行程,返回一个我可以访问其属性的对象{ {1}}和dim.x

2 个答案:

答案 0 :(得分:9)

不需要临时名称Dimension

dim = namedtuple('Dimension', ['x', 'y'])(2, 3)

或者,您可以使用type的三参数形式创建一个新类并创建它的实例:

dim = type('Dimension', (object,), {'x': 2, 'y': 3})()

此对象将使用更多内存,但与namedtuple不同,它将是可变的(对于您的用例,这可能是也可能不是一件好事)。它还会保存import

答案 1 :(得分:0)

我本人经常遇到这个问题; 最好是,如果Python标准库在collections模块中内置了以下便捷功能。但是,您可以随时在本地定义此名称:

def make_namedtuple(class_name, **fields):
    return namedtuple(class_name, fields)(*fields.values())

这样,您可以为单个实例实例化一个新的,一次性使用的namedtuple类,如下所示:

dim = make_namedtuple('Dimension', x=2, y=3)

这对适用于Python 3.6+ [1]

[1]在{3.6之前的Python版本中,**fields'的顺序不保持(换句话说,在PEP 468之前)。您仍然可以使用该函数,但这有点违反了使类像元组,imo那样解包的目的。