我正在运行这个Python脚本:
height_map: list[list[Point]] = [[Point(x, y) for x in range(MAP_SIZE)] for y in range(MAP_SIZE)]
start = time_ns()
for i in range(MAP_SIZE):
for o in range(MAP_SIZE):
print(str(height_map[i][o].height) + ', ', end='')
print()
print(time_ns() - start)
time1 = time_ns() - start
start = time_ns()
for i in range(MAP_SIZE):
for o in range(MAP_SIZE):
print(str(getattr(height_map[i][o], "height")) + ', ', end='')
print()
print(time_ns() - start)
time2 = time_ns() - start
print(f'accesser operator: {time1 * 10 ** -9}\ngetattr function: {time2 * 10 ** -9}')
这样我就可以测试两者之间的性能差异(我有一些功能需要使用
getattr()
)。
奇怪的是,我从 `getattr() 获得的时间比点运算符更快:
accesser operator: 0.14477610000000002
getattr function: 0.0963573
Point
类是一个准系统类,使用__slots__
而不使用__dict__
。
为什么我会从
getattr()
获得更好的表现?
我完全忘记了Python的内存管理系统是如何工作的,我习惯了JIT编译。真正的原因是Python已经加载了所有数据。感谢@Barmar。