def squares(n: int):
for i in range(n):
yield i * i
for value in squares(4):
print(value) # 0 1 4 9
Пример 1. Генератор с yield
# generator_01_basic.py
def count_up_to(n: int):
count = 1
while count <= n:
yield count
count += 1
gen = count_up_to(5)
for number in gen:
print(number) # 1 2 3 4 5
Пример 2. Бесконечный генератор
# generator_02_infinite.py
def infinite_counter(start: int = 1):
count = start
while True:
yield count
count += 1
gen = infinite_counter()
for number in gen:
if number > 5:
break
print(number) # 1 2 3 4 5
Пример 3. yield from
# generator_03_yield_from.py
def process_values(data: list[int]):
for value in data:
yield value * 2
def main_generator(*sequences: list[int]):
for seq in sequences:
yield from process_values(seq)
for result in main_generator([1, 2, 3], [10, 15]):
print(result) # 2 4 6 20 30
Пример 4. Закрытие генератора
# generator_04_close.py
def sensor_data(data: list[int]):
for value in data:
yield value
numbers = [10, 20, 30, 40, 50]
gen = sensor_data(numbers)
for element in gen:
print("Получено значение:", element)
if element >= 30:
print("Значение найдено, закрываем генератор.")
gen.close()
break