Назад к вопросам
Middle
134
questionbank

В чем разница между итератором, итерируемым объектом и генератором в Python?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Итерируемый объект (iterable) — любой объект, который может вернуть итератор (iterator). Имеет метод __iter__(). Пример: списки, кортежи, строки.

Итератор (iterator) — объект, который представляет поток данных. Возвращает следующий элемент при вызове метода __next__(). Если элементов больше нет, генерирует исключение StopIteration. Имеет методы __iter__() (возвращает сам себя) и __next__().

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

# Пример итерируемого объекта (список)
my_list = [1, 2, 3]

# Пример итератора, полученного из итерируемого объекта
my_iterator = iter(my_list)

# Получение следующего элемента с помощью итератора
print(next(my_iterator))
print(next(my_iterator))

# Пример функции-генератора
def my_generator_function():
    yield 1
    yield 2
    yield 3

# Создание объекта-генератора
my_generator = my_generator_function()

# Получение следующего элемента из генератора (использует __next__ неявно)
print(next(my_generator))
print(next(my_generator))
Характеристика Итерируемый объект Итератор Генератор
Возможность итерации Да Да Да
Метод __iter__() Возвращает итератор Возвращает сам себя Возвращает сам себя
Метод __next__() Нет (требует iter() сначала) Возвращает следующий элемент Используется для получения элементов (next())
Создание Встроенные типы, классы с __iter__ Получается из итерируемого объекта (iter()) Функция-генератор с yield, генераторные выражения
Память Хранит все элементы Хранит состояние и ссылку на следущий элемент Лениво вычисляет элементы, хранит состояние