Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
07 Июл 2023
2 мин
5485

Разница между генераторами и итераторами в Python

Когда речь заходит о переборе элементов в Python, часто упоминаются два понятия: итераторы и генераторы. Но что это такое и в чем между ними разница? Итераторы

Когда речь заходит о переборе элементов в 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. Они позволяют перебирать элементы коллекций, не загружая все элементы в память одновременно, что делает их очень эффективными для работы с большими наборами данных.

Тест на профориентацию
За 10 минут узнайте, как ваш опыт пригодиться в IT индустрии
Подробнее
Тест на профориентацию

Добавить комментарий