Пример ответа
Коротко: В Python итератор — это объект, который реализует протокол итерации, позволяя последовательно получать элементы из коллекции или потока данных.
Ключевые идеи:
- Итератор должен иметь метод __next__, который возвращает следующий элемент или вызывает StopIteration
- Итератор также реализует метод __iter__, возвращающий сам себя, что делает его итерируемым
- Встроенные функции, такие как iter() и next(), работают с итераторами для обхода данных
Пример: Например, при вызове iter([1, 2, 3]) возвращается итератор списка, и каждый вызов next() возвращает 1, 2, 3, а затем StopIteration.
Пример реализации пользовательского итератора для генерации чисел Фибоначчи
python
class FibonacciIterator:
def __init__(self, limit):
self.limit = limit
self.a, self.b = 0, 1
self.count = 0
def __iter__(self):
return self
def __next__(self):
if self.count >= self.limit:
raise StopIteration
result = self.a
self.a, self.b = self.b, self.a + self.b
self.count += 1
return result
# Использование
fib_iter = FibonacciIterator(5)
for num in fib_iter:
print(num) # Вывод: 0, 1, 1, 2, 3
Вопросы для интервьюера:
- Чем итератор отличается от итерируемого объекта? — Итерируемый объект имеет метод __iter__, возвращающий итератор, а итератор добавляет метод __next__ для последовательного доступа.
- Как вы используете итераторы в реальных проектах на Python? — Я применяю их для обработки больших данных потоково, например, при чтении файлов построчно или работе с базами данных через курсоры.
Практический совет (на неделю):
- Практикуйтесь в создании собственных итераторов для понимания протокола, начиная с простых случаев, как в примере выше.
- Используйте генераторы (yield) как более простую альтернативу итераторам для ленивых вычислений в продакшене.
Python Backend
Общий
24%
Следующий: С какими БД работал
Предыдущий: Какие знаешь типы данных в Python