💻 Практические примеры

⚡ Минимальный пример

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

Пример 5. JSON: сериализация и десериализация

# json_01_basic.py
import json

person = {"name": "Alice", "age": 25, "is_student": False}
json_string = json.dumps(person, ensure_ascii=False, indent=2)
print(json_string)

loaded = json.loads(json_string)
print(loaded["name"])  # Alice

Пример 6. JSON с русским текстом

# json_02_unicode.py
import json

data = {"city": "Берлин", "country": "Германия"}
print(json.dumps(data))                          # \uXXXX
print(json.dumps(data, ensure_ascii=False))      # читаемый текст

Пример 7. datetime

# datetime_01_basic.py
from datetime import datetime, timedelta

now = datetime.now()
print(now.strftime("%d.%m.%Y %H:%M:%S"))

deadline = datetime.strptime("01.12.2025", "%d.%m.%Y")
days_left = (deadline - now).days
print(f"До дедлайна осталось дней: {days_left}")

future = now + timedelta(weeks=2)
print(future.strftime("%Y-%m-%d"))