07 Июл 2023
2 мин
4078

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

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

Содержание

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

Итераторы

Итератор — это объект, который позволяет обойти все элементы коллекции (список, кортеж, словарь и т.д.). Итераторы создаются с помощью двух методов: __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 — это генератор. При вызове этой функции возвращается итератор, который можно использовать для перебора чисел.

В чем разница?

Основное отличие генераторов от итераторов заключается в том, как они создаются. Итераторы требуют больше кода и больше понимания протокола итератора. Генераторы же позволяют создать итератор более простым и удобным способом.

В общем, итераторы и генераторы обеспечивают удобный способ работы с коллекциями данных в Python. Они позволяют перебирать элементы коллекций, не загружая все элементы в память одновременно, что делает их очень эффективными для работы с большими наборами данных.

Содержание

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

Определи профессию по рисунку