[英]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
这在两个变体相同的实验误差之内。 粗略的实验表明:
因此,可以肯定地说出性能没有差异的结论。
请注意,根据类的实现,返回的值可能不同。
这将返回实例的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.