这是我的意思的示例:
s = """
if x > 10:
x -= 10
else:
x = 0
"""
import timeit
print(timeit.timeit(s, setup="x=5", number=99999999))
不管设置如何,在我的计算机上输出大约3秒(x=5
vs x=15
,无差异)
如果我要使用短得多的代码,则首先减少代码,x -= 10
然后再检查,如果x < 0
得到的结果会更差:
s = """
x -= 10
if x < 0:
x = 0
"""
import timeit
print(timeit.timeit(s, setup="x=5", number=99999999))
它将再次输出约6秒,而不管x
was的初始值5
还是15
。
我知道这会比较慢,x < 10
因为我们先调用x -= 10
然后设置,x = 0
而不是简单地设置x
一次。
事实是,x
在我的程序中,有99%的时间将初始值设置为远远大于10的数字,所以我认为我会使用较短的版本,因为在大多数情况下,我认为性能不会有所不同。
但是,即使在情况下x > 10
,性能也存在巨大差异,这是为什么呢?
你的前提是错的。setup
整个系统只运行一次timeit
。如果您确保其值x
保持不变,10
则症状会消失:
>>> s1 = """
... if x > 10:
... x -= 10
... else:
... x = 0
... """
>>> s2 = """
... x -= 10
... if x < 0:
... x = 0
... """
>>> import timeit
>>> print(timeit.timeit(s1, setup="x=1000000000", number=99999999))
8.934118068675566
>>> print(timeit.timeit(s2, setup="x=1000000000", number=99999999))
8.744505329313448
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句