类方法和静态方法之间是否存在速度差异?我知道不同的用例,但有时我可以完全摆脱类方法,并想知道速度差异
答案 0 :(得分:6)
测试一下。这将是您正在运行的任何Python解释器(以及所述解释器的版本)的实现细节。对于我的解释器(Python 3.5,Windows,64位):
>>> class Foo:
... @classmethod
... def bar(cls):
... pass
... @staticmethod
... def baz():
... pass
...
>>> import timeit
>>> min(timeit.repeat('Foo.bar()', 'from __main__ import Foo', repeat=5, number=100000))
0.02093224880448102
>>> min(timeit.repeat('Foo.baz()', 'from __main__ import Foo', repeat=5, number=100000))
0.017951558014670965
>>> min(timeit.repeat('f.bar()', 'from __main__ import Foo; f = Foo()', repeat=5, number=100000))
0.020720195652103257
>>> min(timeit.repeat('f.baz()', 'from __main__ import Foo; f = Foo()', repeat=5, number=100000))
0.017714758216740734
看起来staticmethod
稍微快一些(可能只是因为它根本不需要将参数传递给函数),但我们讨论的是100,000次调用的差异为3毫秒,每次通话费用为纳秒。