в мире программирования Python, итераторы и генераторы являются двумя близкими, но различными концепциями. Давайте углубимся в их различия и исследуем, когда каждая из этих конструкций оказывается наиболее полезным.
итераторы: общая абстракция для прохождения данных
итератор - это более общая абстракция, которая включает любой объект с помощью следующего Генераторы: специальный тип итератора с Magic Magic
каждый генератор является итератором, но не вице -версии. Генератор строится путем вызова функции, содержащей одно или несколько выражений доходности. Эти выражения доходности временно приостанавливают выполнение и возвратные значения функции. Полученный объект обладает характеристиками итератора, но его реализация является уникальной.
, когда использовать итераторы против генераторов
пользовательский __next __.
генераторы: генераторы, как правило, более подходящие и проще для реализации для большинства сценариев, особенно когда обслуживание состояния минимально. Выражения доходности обрабатывают приостановку и возобновление кадра, что делает его легким для управления состоянием.
Практический пример: генерирование квадратных чисел
рассмотрим задачу генерации квадратных чисел в данном диапазоне. для я в диапазоне (Start, Stop): Получите i * i # Использовать доход для паузы и возврата значений
custom Итератор реализации:
класс Squares (Object): def __init __ (я, старт, остановка): self.start = start self.stop = stop def __iter __ (self): вернуть себя def __next __ (self): Если self.start> = self.stop: Поднимите остановку current = self.start * self.start Self.Start = 1 Возврат Current , В то время как подход генератора требует меньшего количества кода, пользовательский итератор дает большую гибкость дополнительными методами.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3