我做了一些测试。
我有以下功能:
def call_1000000_times(f):
start = time.time()
for i in xrange(1000000):
f(a=i, b=10000-i)
return time.time() - start
如您所见,此函数接受另一个函数,调用它 1000000 次,并返回花费了多长时间(以秒为单位)。
我还创建了两个类:
一个小班:
class X(object):
def __init__(self, a, b):
self.a = a
self.b = b
还有一个相当大的:
class Y(object):
def __init__(self, a, b):
self.a = a
self.b = b
def foo(self): pass
def bar(self): pass
def baz(self): pass
def anothermethod(self):
pass
@classmethod
def hey_a_class_method(cls, argument):
pass
def thisclassdoeswaytoomuch(self): pass
def thisclassisbecomingbloated(self): pass
def almostattheendoftheclass(self): pass
def imgonnahaveacouplemore(self): pass
def somanymethodssssss(self): pass
def should_i_add_more(self): pass
def yes_just_a_couple(self): pass
def just_for_lolz(self): pass
def coming_up_with_good_method_names_is_hard(self): pass
结果:
>>> call_1000000_times(dict)
0.2680389881134033
>>> call_1000000_times(X)
0.6771988868713379
>>> call_1000000_times(Y)
0.6260080337524414
如您所见,大类和小类之间的差异非常小,在这种情况下大类甚至更快。我假设如果你用相同的类型多次运行这个函数,并对数字进行平均,它们会更接近,但现在是凌晨 3 点,我需要睡觉,所以我现在不打算设置它。
另一方面,仅仅调用dict
大约快 2.5 倍,所以如果你的瓶颈是实例化,这可能是一个优化事物的地方。
不过要警惕过早的优化。类通过将数据和代码保存在一起,可以使您的代码更易于理解和构建(函数式编程爱好者,这不是争论的地方)。使用 python分析器或其他性能测量工具来找出代码的哪些部分减慢了它可能是一个好主意。