速度静态方法与类方法

时间:2016-05-26 23:05:48

标签: python optimization static-methods class-method

类方法和静态方法之间是否存在速度差异?我知道不同的用例,但有时我可以完全摆脱类方法,并想知道速度差异

1 个答案:

答案 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毫秒,每次通话费用为纳秒。