【发布时间】:2019-11-04 05:23:38
【问题描述】:
我最近开始学习编程(使用 Python)。我有两段代码使用 while 循环:
a=100000000
#piece of code 1
while a > 0:
a-=10
print("done")
#piece of code 2
while True:
a-=10
if a <= 0:
print("done")
break
两者在功能上是等效的,即它们本质上执行相同的任务。出于好奇,我使用 time 模块记录了使用此 while 循环的两个版本执行此操作所需的时间。结果是:
代码 1:0.99 秒
代码 2:0.89 秒
它们表现出基本相同的性能,尽管代码 2 的效率稍高一些。这没关系,因为即使对于非常大的数字,这种差异基本上也无关紧要。然而,这对我来说有点出乎意料,因为我相信第一个 while 循环执行的操作更少。有人能解释一下为什么第二段代码效率更高吗?
【问题讨论】:
-
第二个循环模拟了一个 do-while 循环,减少了一次检查。现在差异可能是别的东西(你必须检查字节码才能真正理解发生了什么),但有必要了解两者之间的逻辑差异,并且它们并不总是等价的。
-
更少的语句并不意味着更少的操作。第一个仍然需要评估
>的次数与第二个评估<=的次数相同。除非测量不确定性是解释,否则我可以想象>是根据<=实现的。 -
我在 Python 3.6 上的 IPython 5.5 中得到了 0.882s 和 0.900s。我尝试更改
a的值并得到类似的结果。但无论如何,如果结果始终处于同一数量级,这里就没有什么真正有趣的事情发生了。
标签: python python-3.x while-loop