为什么while循环比for循环要花更长的时间?

时间:2019-02-12 10:54:09

标签: python performance for-loop while-loop

编辑:我按照一些评论所说做,并且多次运行了测试。事实证明,将它们都运行10,000次后,while循环会稍快一些,这很有意义。我不好。

我在Python中编写了两个最低的公分母函数,一个使用for循环和三个导入,另一个使用while循环和一个导入。

# for loop
import sys
import operator as op
import functools as ft

def lcd(nums):
    if len(nums) < 2:
        return("Error: must be at least 2 numbers")
    elif 0 in nums:
        return("Error: cannot contain 0")
    else:
        nums = list(map(lambda x: abs(x), nums))
        highestLCD = ft.reduce(op.mul, nums) # multiply all nums together
        for i in range(max(nums),highestLCD,max(nums)):
            if all(i % n == 0 for n in nums):
                return i
        return highestLCD

if __name__ == "__main__":
    print(lcd([int(n) for n in sys.argv[1:]]))
# while loop
import sys

def lcd(nums):
    if len(nums) < 2:
        return("Error: must be at least 2 numbers")
    elif 0 in nums:
        return("Error: cannot contain 0")
    else:
        i = m = max(nums)
        while True:
            if all(i % n == 0 for n in nums):
                return i
            i += m

if __name__ == "__main__":
    print(lcd([int(n) for n in sys.argv[1:]]))

我希望while循环会更快,因为它具有更少的导入函数调用。

但是,在将它们都运行1000次之后,while循环实际上要慢大约半秒到一整秒。

for

real    0m43.808s
user    0m29.016s
sys     0m10.164s
while

real    0m44.892s
user    0m29.528s
sys     0m10.565s

这是为什么?

1 个答案:

答案 0 :(得分:0)

查看此答案:Why is looping over range() in Python faster than using a while loop?

似乎range()比i + = 1更有效。