Sobes.tech
Junior
107
questionbank

В чем заключается разница между итератором и генератором в Python?

AI答案

sobes.tech AI

Итератор - это объект, реализующий протокол итерации (iter() и next()). Он позволяет проходить последовательно по элементам коллекции. Генератор - это особый тип итератора, который создается с помощью функции-генератора (содержит ключевое слово yield). Генераторы генерируют значения "на лету", экономя память.

Ключевые отличия:

  • Реализация: Итератор реализует протокол итерации классами. Генератор реализуется функцией с yield.
  • Память: Генераторы более эффективны с точки зрения памяти, так как генерируют значения по запросу, не храня всю последовательность в памяти одновременно. Итераторы могут хранить всю коллекцию.
  • Однократное использование: Генераторы могут быть использованы для итерации только один раз. Итератор, если он не является генератором, может итерироваться несколько раз, если его создать заново.
# Пример итератора
class MyIterator:
    def __init__(self, limit):
        self.limit = limit
        self.current = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.current < self.limit:
            self.current += 1
            return self.current
        else:
            raise StopIteration

# Пример генератора
def my_generator(limit):
    for i in range(1, limit + 1):
        yield i