Итерируемый объект (iterable) — это объект, который можно перебирать в цикле for
. Он возвращает свои элементы по одному и может быть использован везде, где ожидается последовательность элементов.
for item in iterable
iter()
Объект является итерируемым, если он реализует один из двух методов:
__iter__()
— возвращает итератор__getitem__()
— поддерживает доступ по индексу (для последовательностей)from collections.abc import Iterable
print(isinstance([1, 2, 3], Iterable)) # True
print(isinstance("hello", Iterable)) # True
print(isinstance(42, Iterable)) # False
list_ = [1, 2, 3] # Список
tuple_ = (1, 2, 3) # Кортеж
str_ = "abc" # Строка
dict_ = {'a': 1} # Словарь
set_ = {1, 2, 3} # Множество
def countdown(n):
while n > 0:
yield n
n -= 1
# Генераторное выражение
gen = (x**2 for x in range(5))
with open('file.txt') as f:
for line in f: # Файл итерируемый
print(line)
Важно понимать разницу:
__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
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 и позволяют эффективно работать с последовательностями данных.