Python 为什么while循环比for循环耗时更长?

Python 为什么while循环比for循环耗时更长?,python,performance,for-loop,while-loop,Python,Performance,For Loop,While Loop,编辑:我按照一些评论所说的做了,并且运行了更多次测试。事实证明,在将它们都运行10000次之后,while循环稍微快一点,这是有意义的。我的错 我用Python编写了两个最小公分母函数,一个使用for循环和三个导入,另一个使用while循环和一个导入 #用于循环 导入系统 作为op导入运算符 将工具作为ft导入 def lcd(nums): 如果len(nums)

编辑:我按照一些评论所说的做了,并且运行了更多次测试。事实证明,在将它们都运行10000次之后,while循环稍微快一点,这是有意义的。我的错

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

#用于循环
导入系统
作为op导入运算符
将工具作为ft导入
def lcd(nums):
如果len(nums)<2:
返回(“错误:必须至少为2个数字”)
以nums表示的elif 0:
返回(“错误:不能包含0”)
其他:
nums=列表(映射(λx:abs(x),nums))
highestLCD=ft.reduce(op.mul,nums)#将所有nums相乘
对于范围内的i(最大值(nums)、最高LCD、最大值(nums)):
如果全部(i%n==0,单位为nums):
返回i
返回最高点LCD
如果名称=“\uuuuu main\uuuuuuuu”:
打印(lcd([int(n)表示系统argv[1:]]中的n)
#while循环
导入系统
def lcd(nums):
如果len(nums)<2:
返回(“错误:必须至少为2个数字”)
以nums表示的elif 0:
返回(“错误:不能包含0”)
其他:
i=m=max(nums)
尽管如此:
如果全部(i%n==0,单位为nums):
返回i
i+=m
如果名称=“\uuuuu main\uuuuuuuu”:
打印(lcd([int(n)表示系统argv[1:]]中的n)
我希望while循环更快,因为它有更少的imports函数调用

然而,在将它们都运行1000次之后,while循环实际上要慢半秒到一整秒

for

real    0m43.808s
user    0m29.016s
sys     0m10.164s
为什么会这样?

请参见以下答案:


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

这不是你的基准!你的测试规模很小。测试环境不相等。许多其他问题。请使用timeit重新运行这些测试并发布结果:
for
循环有一个明确的上限,
循环没有错误。。。如果要比较for/while循环,则需要确保使用这些迭代的算法是相同的。。。不仅仅是相似,在确保您可以猜测之前。(顺便说一句:为了更仔细地了解,在导入'dis'后将函数放入dis.dis')@meissner_u重点不是比较while循环到for循环,而是比较两种算法。使用while循环的那个被优化为使用while循环,使用for循环的那个被优化为使用for循环。谢谢!结果证明我只是没有运行足够的测试。10000次显示while循环快约10/5/2秒。
while

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