код, который является общим для обеих реализаций:
from math import sqrt
def factors(x):
num = 2
sq = int(sqrt(x))
for i in range(2, sq):
if (x % i) == 0:
num += 2
return num + ((1 if sq == sqrt(x) else 2) if x % sq == 0 else 0)
1. Реализация, которая не использовать функцию генератора:
i = 1
while True:
if factors(i * (i+1) * 0.5) > 500:
print(int(i * (i+1) * 0.5))
break
i += 1
2. Реализация, что делает использование функции генератора :
def triangle():
i = 1
while True:
yield int(0.5 * i * (i + 1))
i += 1
t = triangle()
while True:
num = t.__next__()
if factors(num) > 500:
print(num)
break
Вопрос:
Первая реализация занимает около 4 секунд, а вторая занимает примерно 8,2 секунды. Почему существует такая большая разница между временем выполнения двух реализаций?Почему функция генератора работает в два раза быстрее?
Имеет ли значение, что это функция генератора, или это просто еще один случай [код Python быстрее, когда вы помещаете его в функцию] (http://stackoverflow.com/questions/11241523/why-does-python-code -run-быстрее-в-функции)? – BrenBarn
* Первая реализация занимает около 4 секунд, в то время как вторая занимает примерно 8,2 секунды * - правильно ли ваш заголовок сообщения или правильный порядок блоков кода? –
Реализация с генератором выполняется быстрее и занимает около 4 секунд –