【发布时间】:2012-12-02 21:38:44
【问题描述】:
我正在对循环中 if 语句的速度及其对速度的影响进行一些测试。我发现,if 语句始终如一地提高了性能。我的代码:
import time
t = time.time
start = t()
x = 0
while x < 10000000:
x += 1
time1 = t()
x = 0
while x < 10000000:
x += 1
if True:
pass
time2 = t()
print(start)
print(time1 - start) # Time for simple while-loop
print(time2 - time1) # Time for while+if
示例输出为:
1355517837.993
1.7850000858306885
1.7209999561309814
这完全违反直觉。 while-if-loop 的工作速度比标准的 while-loop 快得多。几乎每次我运行它都会发生这种情况;也许 20 次中有 1 次需要更长的时间。有谁知道为什么?
【问题讨论】:
-
如果将
x=0移出两个定时块会怎样?我敢打赌,你看到的是解释器必须为第一个块分配x而不是第二个。 -
这里不一样,虽然';我有这样的时间:
$ python t.py 1355519439.65 1.92616391182 2.65010595322;在 Python 2.7.3 上运行 -
如果您先运行 if 循环,然后再运行没有它的循环,结果是否相同?对我来说,第一个总是更快。
-
我在 2.7 中得到了你所期望的结果,在 3.2 中得到了奇怪的结果。
-
正如预期的那样,第二个版本(在 Python 3.2.3 中)也持续获得更长的时间。请记住,
time.time()不是分析程序的正确方法(因为其他任务可能会影响结果)。请改用timeit.timeit()。
标签: python performance if-statement python-3.x while-loop