@Bjornie
Изучаю Python

Когда на практике нужны итераторы (iter/next) в Python?

Механика создания итератора и его использование мне понятно, однако не понятно как на практике мне может понадобиться итерация вручную с помощью next (или методом __next__). Я разработчик на Django, в основном. Как это мне может пригодиться? А в других задачах, не шибко сложных - где?
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Если у вас есть код, который должен в цикле обойти QuerySet, в котором могут быть миллионы записей, то обычный

for item in some_qs.all():
    ...

может быть опасным, так как все данные разом будут загружены в память. Итератор же будет загружать данные из базы небольшими блоками, а объекты и вовсе будет возвращать по одному, не кэшируя их

for item in some_qs.iterator():
    ...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
LaRN
@LaRN
Senior Developer
Как пример - ленивые операции, например получение данных их файла. Можно либо все за раз в память закачать (если память позволит), либо порционно через итератор получать данные.
Но как по мне, итераторы позволяют делать код меньше и лаконичнее. Например те же zip и map позволяют сложные конструкции умещать в небольшой код.
Ответ написан
Комментировать
__next__() мне часто требуется, когда нужно взять первый элемент генератора. К примеру, список файлов и папок в директории

path, subdirs, files = os.walk('.').__next__()

Думаю, может возникнуть ситуация, когда при итерации при анализе текущего значения потребуется пропустить пропустить следующее значение (не текущее, а именно следующее). Тут __next__() и поможет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы