速度静态方法与 Class 方法
Speed Static Methods vs Class Method
class 方法和静态方法在速度上有区别吗?我知道不同的用例,但有时我可以完全摆脱 class 方法并想知道速度差异
测试一下。这将是您恰好是 运行 的任何 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 毫秒,这是每次调用的纳秒成本。
class 方法和静态方法在速度上有区别吗?我知道不同的用例,但有时我可以完全摆脱 class 方法并想知道速度差异
测试一下。这将是您恰好是 运行 的任何 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 毫秒,这是每次调用的纳秒成本。