Функции-генераторы позволяют вам объявить функцию, которая ведет себя как итератор. Они позволяют программистам создавать итераторы быстрым, простым и понятным способом. Давайте рассмотрим пример, чтобы объяснить эту концепцию.
Предположим, вам дано найти сумму первых 100000000 полных квадратов, начиная с 1.
Выглядит легко, правда? Это легко сделать с помощью list comprehention, но проблема заключается в большом размере входных данных. В качестве примера давайте рассмотрим код ниже:
t1 = time.clock()
sum([i * i for i in range(1, 100000000)])
t2 = time.clock()
time_diff = t2 - t1
print(f"Потребовалось {time_diff} секунд на выполнение этого метода") # Потребовалось 13.197494000000006 секунд на выполнение этого метода Увеличивая числа, которые нам нужно сложить, мы понимаем, в какой-то момент мы просто не сможем вызывать этот метод из-за долгого времени вычислений. Здесь на помощь приходят генераторы Python. При замене квадратных скобок круглыми мы изменяем list comprehension в выражение генератора. Теперь давайте глянем на время:
t1 = time.clock()
sum((i * i for i in range(1, 100000000)))
t2 = time.clock()
time_diff = t2 - t1
print(f"Потребовалось {time_diff} секунд на выполнение этого метода") # Потребовалось 9.53867000000001 секунд на выполнение этого метода Как мы видим, мы нехило убавили затраченное время. Этот эффект станет еще более выраженным для бо́льших данных.
Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…
Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…
Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…
В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…
Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…
Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…