我想存储维namedtuple
(x, y)
。我只需要在整个程序中使用一次。
我能做到:
Dimension = namedtuple('Dimension', ['x', 'y'])
dim = Dimension(2, 3)
但是,因为我确定这是我在整个程序中唯一需要的Dimension
,所以我想知道我是否可以将它变成一个单行程,返回一个我可以访问其属性的对象{ {1}}和dim.x
?
答案 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那样解包的目的。