【发布时间】:2020-11-04 20:02:47
【问题描述】:
我正在浏览数据类并命名元组。我发现这种行为在使用 python 的不同特性创建对象时具有不同的性能。
数据类
In [1]: from dataclasses import dataclass
...:
...: @dataclass
...: class Position:
...: lon: float = 0.0
...: lat: float = 0.0
...:
In [2]: %timeit for _ in range(1000): Position(12.5, 345)
326 µs ± 34.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
普通班:
In [1]: class Position:
...:
...: def __init__(self, lon=0.0, lat=0.0):
...: self.lon = lon
...: self.lat = lat
...:
In [2]: %timeit for _ in range(1000): Position(12.5, 345)
248 µs ± 2.89 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
命名元组:
In [2]: Position = namedtuple("Position", ["lon","lat"], defaults=[0.0,0.0])
In [3]: %timeit for _ in range(1000): Position(12.5, 345)
286 µs ± 13.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Python Env - Python 3.7.3
OS - MacOS Mojave
所有实现都具有相同的对象属性、相同的默认值。
- 为什么会出现时间(data_classes)>时间(named_tuple)>时间(normal_class)的趋势?
- 每个实现都采取了哪些措施来花费各自的时间?
- 哪种实现在什么场景下表现最好?
这里,时间表示创建对象所花费的时间。
【问题讨论】:
标签: python python-3.x python-internals python-dataclasses python-performance