繁体   English   中英

Python类变量访问速度

[英]Python class variable access speed

假设有一个课程:

class x(obj):
    y = 1

什么是更快(或首选)的:

    def __init__(self):
        print self.y

要么:

    def __init__(self):
        print x.y

我认为xy更好地传达意图,但我对速度方面感兴趣。

通过这些微优化可能获得的性能提升并不重要。 到目前为止, print的影响使属性访问的成本相形见war。 供参考,这是一个测试脚本:

import sys,timeit
class ClassAccess(object):
    y = 1
    def __init__(self):
        print(ClassAccess.y)

class SelfAccess(object):
    y = 1
    def __init__(self):
        print(self.y)

ca = timeit.timeit(ClassAccess, number=100000)
sa = timeit.timeit(SelfAccess, number=100000)

sys.stderr.write(str(ca) + "\n")
sys.stderr.write(str(sa) + "\n")

在我的机器上(带有yakuake终端),此输出

0.640013933182
0.628859043121

这在两个变体相同的实验误差之内。 粗略的实验表明:

  • 大约90%的运行时间是由实际显示打印结果引起的。
  • 其余的大约50%是仅打印语句占用的时间。
  • 约的 ,其余的80%是由对象的分配引起的。

因此,可以肯定地说出性能没有差异的结论。

请注意,根据类的实现,返回的值可能不同。

这将返回实例的y属性:

def __init__(self):
    print self.y

虽然这将返回该类的y属性:

def __init__(self):
    print x.y

如果构造函数覆盖y属性a la:

def __init__(self, y=None):
    self.y = y
def print(self):
    print self.y

返回的值将有所不同。 Python在实例内部字典中查找y,然后再检查类内部字典。 因此,我认为print xy应该稍微快一些,因为它避免了查找实例字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM