繁体   English   中英

是否有任何理由在 Python 中使用 collections.namedtuple 而不是 typing.NamedTuple?

[英]Is there any reason to use collections.namedtuple over typing.NamedTuple in Python?

我在一些代码中使用了collections.namedtuple ,但现在我看到在 Python 3.6 中有一个新的typing.NamedTuple基类以新的类样式可用。 它还似乎使类型提示可用于元组中的命名索引。

除了与旧代码的兼容性之外,是否有任何理由在新编写的代码中继续使用旧的collections.namedtuple (来自 Python 2.6)?

即是否有性能优势,是否使用更少的内存等?

不幸的是, typing.NamedTuple目前不支持 mixins 因此,例如(从这个问题的讨论中截取下面的示例)我们可以创建一个枚举,它继承了collections.namedtuple mixin 的所有属性,但是我们不能对typing.NamedTuple做同样的事情,我们可能希望这样做免费获得类型提示:

>>> from enum import Enum
>>> from collections import namedtuple
>>> TTuple = namedtuple('TTuple', 'id a blist')
>>> class NTEnum(TTuple, Enum):
...     NONE = TTuple(0, 0, [])
...     A = TTuple(1, 2, [4])
...     B = TTuple(2, 4, [0, 1, 2])
... 
>>> NTEnum.A
<NTEnum.A: TTuple(id=1, a=2, blist=[4])>
>>> 
>>> NTEnum.A.id
1
>>> NTEnum.B.blist
[0, 1, 2]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM