Назад к вопросам
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, генераторные выражения |
| Память | Хранит все элементы | Хранит состояние и ссылку на следущий элемент | Лениво вычисляет элементы, хранит состояние |