yield
для выдачи следующего числа в последовательности при каждом вызове next()
. Например:
def generate_numbers(start, end):
for i in range(start, end + 1):
yield i
for number in generate_numbers(1, 5):
print(number) # Выведет 1 2 3 4 5
Это позволяет итерировать по большим числовым рядам без хранения их в памяти целиком.
Генераторы в Python позволяют создавать итераторы, которые генерируют значения "на лету", а не хранят весь ряд чисел в памяти. Это особенно полезно для работы с большими или бесконечными числовыми рядами.
Основные преимущества использования генераторов для итерации по числовому ряду:
Примеры:
1. Генератор простого числового ряда (до заданного предела):
def number_range(start, end):
"""Генератор числового ряда от start до end (включительно)."""
num = start
while num <= end:
yield num
num += 1
# Использование генератора:
for number in number_range(1, 5):
print(number) # Вывод: 1 2 3 4 5
2. Генератор простых чисел (до заданного предела):
def is_prime(number):
"""Проверяет, является ли число простым."""
if number <= 1:
return False
for i in range(2, int(number**0.5) + 1):
if number % i == 0:
return False
return True
def prime_numbers(limit):
"""Генератор простых чисел до limit."""
number = 2
while number <= limit:
if is_prime(number):
yield number
number += 1
# Использование генератора:
for prime in prime_numbers(20):
print(prime) # Вывод: 2 3 5 7 11 13 17 19
3. Генератор чисел Фибоначчи (бесконечная последовательность):
def fibonacci():
"""Генератор чисел Фибоначчи."""
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# Использование генератора (возьмем первые 10 чисел):
fib_gen = fibonacci()
for _ in range(10):
print(next(fib_gen)) # Вывод: 0 1 1 2 3 5 8 13 21 34
В этих примерах функция с ключевым словом yield
становится генератором. При каждом вызове yield
функция "замораживается" и возвращает значение. При следующем запросе значения (например, через next()
или в цикле for
) функция возобновляет свое выполнение с того места, где она была остановлена, и продолжает до следующего yield
.
Генераторные выражения (похожие на list comprehensions, но в круглых скобках) также могут использоваться для создания генераторов числовых рядов, например:
# Генератор квадратов чисел от 1 до 5:
squares = (x**2 for x in range(1, 6))
for square in squares:
print(square) # Вывод: 1 4 9 16 25
В заключение, генераторы - мощный инструмент для эффективной и удобной работы с числовыми рядами в Python.