我正在编写自己的稀疏(一维)数组类,但我遇到了一些性能问题.分析表明其中一个瓶颈是我__getitem__和__setitem__实现,特别是,似乎其中一个罪魁祸首可能是我的使用isinstance.目前,我有5个来电isinstance中__getitem__,我得到CPROFILE(摘录)以下数据:
ncalls tottime percall cumtime percall filename:lineno(function)
86462 0.076 0.000 0.084 0.000 sparse.py:107(__setitem__)
189730 0.147 0.000 0.166 0.000 sparse.py:45(__getitem__)
276366 0.028 0.000 0.028 0.000 {built-in method isinstance}
我的__getitem__工具切片和数组访问,所以我怀疑某种类型的内省是必要的...但我想知道是否isinstance真的是最好的方法吗?
__setitem__另一方面,我不支持切片(isinstance在任何情况下只调用一次),所以我不知道如何让它更快.每行分析数据如下:
Line # Hits Time Per Hit % Time Line Contents
==============================================================
108 @profile
109 def __setitem__(self, key, value):
110 88705 121012 1.4 23.0 if not isinstance(key, int):
111 raise TypeError('list …Run Code Online (Sandbox Code Playgroud)