python - 为什么while循环比for循环花费更长的时间?
问题描述
编辑:我按照一些评论所说的做了更多次的测试。事实证明,在运行它们 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
为什么是这样?
解决方案
看到这个答案:为什么在 Python 中循环 range() 比使用 while 循环更快?
似乎range()
i+=1 让事情变得更有效率。
推荐阅读
- postgresql - Doobie 的 PostgreSQL 错误:PSQLException:列索引超出范围:3,列数:2
- c# - 在 Razor 中显示带有十进制值的文本框
- python - python GC是否保证是一个引用计数垃圾收集器
- flutter - 如何在颤动的页面中导航时修复appbar?
- java - 错误的字符集?Java 程序从 args[0] 获取损坏的字符串
- javascript - 如何在 Javascript 中扩展函数以添加新类型?
- javascript - 针对 localhost 进行测试时,赛普拉斯 API 请求中止
- django - 如何在 Django 中注册自定义过滤器
- flutter - 如何调试或查看实时应用程序的日志?
- html - 为什么 Inspinia 侧边栏折叠不起作用?