Когда речь заходит о переборе элементов в Python, часто упоминаются два понятия: итераторы и генераторы. Но что это такое и в чем между ними разница?
Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
Итераторы
Итератор — это объект, который позволяет обойти все элементы коллекции (список, кортеж, словарь и т.д.). Итераторы создаются с помощью двух методов: __iter__()
и __next__()
.
Пример итератора:
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
В этом примере MyNumbers
— это класс, который реализует протокол итератора. В методе __iter__()
устанавливается начальное значение для a
, а __next__()
возвращает следующее значение при каждом вызове.
Генераторы
Генераторы в Python — это более простой способ создания итераторов. Генератор — это специальная функция, которая возвращает итератор. Вместо использования __iter__()
и __next__()
, в генераторах используется ключевое слово yield
.
Пример генератора:
def my_numbers(): a = 1 while True: yield a a += 1 mygen = my_numbers() print(next(mygen)) print(next(mygen)) print(next(mygen)) print(next(mygen))
В этом примере my_numbers
— это генератор. При вызове этой функции возвращается итератор, который можно использовать для перебора чисел.
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
В чем разница?
Основное отличие генераторов от итераторов заключается в том, как они создаются. Итераторы требуют больше кода и больше понимания протокола итератора. Генераторы же позволяют создать итератор более простым и удобным способом.
В общем, итераторы и генераторы обеспечивают удобный способ работы с коллекциями данных в Python. Они позволяют перебирать элементы коллекций, не загружая все элементы в память одновременно, что делает их очень эффективными для работы с большими наборами данных.
Добавить комментарий