python方法在深层层次中的查找性能
python查找方法的规则是首先在实例dict中找到,然后在类dict中找到,然后在python方法在深层层次中的查找性能,python,python-2.7,cpython,Python,Python 2.7,Cpython,python查找方法的规则是首先在实例dict中找到,然后在类dict中找到,然后在\uuu mro\uu中找到基 所以我想寻找一个在深层层次结构中处于最顶层的方法会很昂贵。所以实验代码是: class A(object): def a(self): pass class B(A): pass ... class Z(Y): def z(self): pass def func(inst): inst.z inst.z
\uuu mro\uu
中找到基
所以我想寻找一个在深层层次结构中处于最顶层的方法会很昂贵。所以实验代码是:
class A(object):
def a(self):
pass
class B(A):
pass
...
class Z(Y):
def z(self):
pass
def func(inst):
inst.z
inst.z()
inst.a
inst.a()
from line_profiler import LineProfiler
p = LineProfiler()
p.enable()
instz = Z()
for x in xrange(10000000):
func(instz)
p.print_stats()
输出为:
Line # Hits Time Per Hit % Time Line Contents
==============================================================
1 def func(inst):
2 1000000 436449 0.4 19.9 inst.z
3 1000000 652519 0.7 29.8 inst.z()
4 1000000 428562 0.4 19.6 inst.a
5 1000000 672929 0.7 30.7 inst.a()
访问z
的方法要比a
贵一点?而且z
的方法调用也是勉强成功的
这是否表明深层层次结构与方法查找的性能无关?为什么要针对python 2.7进行优化?Python2.7已经死了,Python3.6进行了无数次优化,这些优化将使所有这些结果都无效。不,深层层次结构在Python2中并不是无关紧要的,但在大多数情况下,它会在噪音中消失。为什么要为Python2.7进行优化?Python2.7已经死了,Python3.6进行了无数次优化,这些优化将使所有这些结果都无效。不,深层层次结构在Python2中并不是无关紧要的,但在大多数情况下,它会在噪音中消失。