Урок 17: Генераторы и итераторы в Python

Генераторы и итераторы в Python

Краткое введение

Генераторы и итераторы в Python — это инструменты, которые используются для создания итерируемых последовательностей. Генераторы позволяют эффективно генерировать последовательности значений "на лету", без необходимости хранения всех элементов в памяти. Итераторы предоставляют интерфейс для доступа к элементам коллекции по одному за раз.

Теоретическая часть

Итераторы

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

Генераторы

Генератор в Python — это функция, которая использует ключевое слово yield для возврата значений. При каждом вызове next() на генераторе, функция возобновляет выполнение с места, где она остановилась (после yield), и продолжает, пока не встретит yield
снова.

Примеры кода

# Пример итератора
class Countdown:
 def __init__(self, start):
 self.current = start
 def __iter__(self):
 return self
 def __next__(self):
 if self.current <= 0:
 raise StopIteration
 else:
 num = self.current
 self.current -= 1
 return num

# Пример генератора
def countdown_gen(start):
 while start > 0:
 yield start
 start -= 1

Практические задания

1. Создайте генератор fibonacci_gen , который выдает элементы последовательности Фибоначчи.
2. Разработайте итератор EvenNumbers, который возвращает четные числа в заданном диапазоне.

Решение задания

# Генератор Фибоначчи
def fibonacci_gen(n):
 a, b = 0, 1
 while n > 0:
 yield a
 a, b = b, a + b
 n -= 1

# Итератор четных чисел
class EvenNumbers:
 def __init__(self, start, end):
 self.current = start
 self.end = end
 def __iter__(self):
 return self
 def __next__(self):
 if self.current > self.end:
 raise StopIteration
 else:
 while self.current % 2 != 0:
 self.current += 1
 num = self.current
 self.current += 2
 return num

© 2024 realschule.ru

Категория: Python с нуля | Добавил: Admin (07.03.2024)
Просмотров: 126 | Рейтинг: 1.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: