Редактировать: я сделал, как было сказано в некоторых комментариях, и проводил тест больше раз.Оказывается, после запуска их 10000 раз цикл 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
Почему это?