假设有一个类:
class x(obj):
y = 1
什么是更快(或首选):
def __init__(self):
print self.y
或者:
def __init__(self):
print x.y
我认为x.y
可以更好地传达意图,但我对速度影响感兴趣。
假设有一个类:
class x(obj):
y = 1
什么是更快(或首选):
def __init__(self):
print self.y
或者:
def __init__(self):
print x.y
我认为x.y
可以更好地传达意图,但我对速度影响感兴趣。
通过这些微优化可能实现的性能提升并不重要。到目前为止,ing的影响使print
属性访问的成本相形见绌。作为参考,这是一个测试脚本:
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 之前查找实例内部字典以检查类 internat 字典。所以我认为 print xy 应该稍微快一些,因为它避免了查找实例字典。