Что такое итерабельный объектpython-74

Итерируемый объект (iterable) — это объект, который можно перебирать в цикле for. Он возвращает свои элементы по одному и может быть использован везде, где ожидается последовательность элементов.

Ключевые особенности итерируемых объектов

  1. Поддержка итерации — можно использовать в for item in iterable
  2. Не обязательно хранит все элементы в памяти — может генерировать элементы "на лету"
  3. Может быть использован для создания итератора — через функцию iter()

Как Python понимает, что объект итерируемый?

Объект является итерируемым, если он реализует один из двух методов:

  1. __iter__() — возвращает итератор
  2. __getitem__() — поддерживает доступ по индексу (для последовательностей)
from collections.abc import Iterable

print(isinstance([1, 2, 3], Iterable))  # True
print(isinstance("hello", Iterable))    # True
print(isinstance(42, Iterable))         # False

Основные типы итерируемых объектов

1. Встроенные контейнеры

list_ = [1, 2, 3]       # Список
tuple_ = (1, 2, 3)      # Кортеж
str_ = "abc"            # Строка
dict_ = {'a': 1}        # Словарь
set_ = {1, 2, 3}        # Множество

2. Генераторы

def countdown(n):
    while n > 0:
        yield n
        n -= 1

# Генераторное выражение
gen = (x**2 for x in range(5))

3. Файловые объекты

with open('file.txt') as f:
    for line in f:  # Файл итерируемый
        print(line)

Разница между Iterable и Iterator

Важно понимать разницу:

  • Iterable — объект, который можно итерировать (но сам по себе не сохраняет состояние итерации)
  • Iterator — объект, который управляет итерацией (реализует __next__() и запоминает текущее положение)
numbers = [1, 2, 3]       # Iterable
iter_obj = iter(numbers)  # Iterator

print(next(iter_obj))     # 1
print(next(iter_obj))     # 2

Создание собственного итерируемого объекта

class Count:
    def __init__(self, limit):
        self.limit = limit

    def __iter__(self):
        self.n = 1
        return self

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

# Использование:
for num in Count(3):
    print(num)  # 1, 2, 3

Практическое применение итерируемых объектов

  1. Экономия памяти — генераторы не хранят всю последовательность
  2. Ленивые вычисления — элементы вычисляются только когда нужны
  3. Работа с большими данными — обработка по частям
  4. Интеграция с языком — работа с for, map(), filter(), comprehensions
# Пример ленивой обработки
def parse_large_file(filename):
    with open(filename) as f:
        for line in f:
            yield process_line(line)  # Обрабатываем по одной строке

Резюмируем

Итерируемый объект — это любой объект, который можно использовать в цикле for. Основные виды: контейнеры, генераторы, файлы. Главное требование — наличие метода __iter__() или __getitem__(). Итерируемые объекты лежат в основе многих возможностей Python и позволяют эффективно работать с последовательностями данных.