• 技术文章 >Python技术 >Python基础教程

    python namedtuple数据类哪个运行快

    小妮浅浅小妮浅浅2021-01-12 18:17:27原创1998

    我们已经使用namedtuple进行建类的操作,对于它其它的功能上认知还不够全面。鉴于namedtuple在其他模块上提到的不是很多,小编决定陆续完整的为大家带来namedtuple的讲解和运用。今天就类中访问字段的一个速度,我们和数据类进行对比,看看哪一个运行的速度很更快。


    Dataclasses的用法。

    Python3.7 提供了一个装饰器dataclass,用以把一个类转化为dataclass。

    你需要做的就是把类包裹进装饰器里:

    from dataclasses import dataclass
    @dataclass
    class A:
     ...

    namedtuple和数据类在性能上也有所不同。数据类基于纯Python实现dict。这使得它们在访问字段时更快。另一方面,namedtuples只是常规的扩展tuple。这意味着它们的实现基于更快的C代码并具有较小的内存占用量。

    为了证明这一点,请考虑在Python 3.8.5上进行此实验。

    In [6]: import sys
    In [7]: ColorTuple = namedtuple("Color", "r g b alpha")
    In [8]: @dataclass
       ...: class ColorClass:
       ...:     """A regular class that represents a color."""
       ...:     r: float
       ...:     g: float
       ...:     b: float
       ...:     alpha: float
       ...: 
     
    In [9]: color_tup = ColorTuple(r=50, g=205, b=50, alpha=1.0)
     
    In [10]: color_cls = ColorClass(r=50, g=205, b=50, alpha=1.0)
     
    In [11]: %timeit color_tup.r
    36.8 ns ± 0.109 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
     
    In [12]: %timeit color_cls.r
    38.4 ns ± 0.112 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
     
    In [15]: sys.getsizeof(color_tup)
    Out[15]: 72
     
    In [16]: sys.getsizeof(color_cls) + sys.getsizeof(vars(color_cls))
    Out[16]: 152

    如上,数据类在中访问字段的速度稍快一些,但是它们比nametuple占用更多的内存空间。

    鉴于nametuple和数据类的优点更不相同,即使是数据类的访问速度更快,在我们内存空间不是很宽裕的条件下,小编还是推荐大家使用nametuple

    专题推荐:namedtuple
    上一篇:python如何用while循环打印九九乘法表? 下一篇:namedtuple如何在python中加入类型提示?

    相关文章推荐

    • 如何使用python里的namedtuple?• 如何快速掌握python中namedtuple模块?• python namedtuple中加入新字段

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网