python方法在深层层次中的查找性能

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

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()
    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中并不是无关紧要的,但在大多数情况下,它会在噪音中消失。