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

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

# min_example.py
nums = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [2, 4, 6]

Пример 1. Предикат и фильтрация

Отдельная функция-предикат делает код понятнее, когда условие сложное или используется в нескольких местах.

# predicate_filter.py
from typing import Callable


def is_even(n: int) -> bool:
    return n % 2 == 0


def filter_numbers(
    predicate: Callable[[int], bool],
    numbers: list[int]
) -> list[int]:
    return [n for n in numbers if predicate(n)]


nums = [1, 2, 3, 4, 5, 6]
print(filter_numbers(is_even, nums))  # [2, 4, 6]

Что происходит: функция filter_numbers принимает другую функцию и список, обходит список и оставляет только элементы, прошедшие проверку.

Пример 2. Фильтрация с lambda

Для простых условий можно обойтись без отдельной функции.

# lambda_filter.py
nums = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [2, 4, 6]

filter возвращает итератор, поэтому результат нужно преобразовать в список для вывода.

Пример 3. Агрегирование через reduce

Произведение элементов удобно вычислять через reduce из модуля functools.

# reduce_product.py
from functools import reduce


def product(numbers: list[int]) -> int:
    return reduce(lambda acc, x: acc * x, numbers, 1)


numbers = [1, 2, 3, 4, 5]
print(product(numbers))  # 120

Начальное значение 1 важно: оно даёт корректный результат для пустого списка и не меняет произведение для непустого.

Пример 4. Сортировка по длине

# sort_by_length.py
def sort_by_length(words: list[str]) -> list[str]:
    return sorted(words, key=len)


words = ["apple", "banana", "kiwi", "grape"]
print(sort_by_length(words))  # ['kiwi', 'grape', 'apple', 'banana']

Функция len применяется к каждому слову, и сортировка идёт по полученным числам.

Пример 5. Сортировка по сумме кодов символов

Сложный ключ сортировки можно записать лямбдой.

# sort_by_ord_sum.py
words = ["banana", "kiwi", "grapefruit", "apple"]
sorted_words = sorted(words, key=lambda word: sum(ord(c) for c in word))
print(sorted_words)  # ['kiwi', 'apple', 'banana', 'grapefruit']

Генератор sum(ord(c) for c in word) вычисляет сумму кодов символов слова, и sorted использует эту сумму как ключ.

Пример 6. Композиция функций для шифрования

Цепочка преобразований строки: верхний регистр, сдвиг символов, переворот.

# encryption_chain.py
from typing import Callable


def to_uppercase(text: str) -> str:
    return text.upper()


def shift_encrypt(text: str, shift: int = 5) -> str:
    return "".join(chr(ord(c) + shift) for c in text)


def reverse_string(text: str) -> str:
    return text[::-1]


def encrypt(
    text: str,
    functions: list[Callable[[str], str]]
) -> str:
    result = text
    for func in functions:
        result = func(result)
    return result


sentence = "Functional programming is powerful"
functions = [to_uppercase, shift_encrypt, reverse_string]
print(encrypt(sentence, functions))

Что происходит: каждая функция по очереди преобразует строку. Функция encrypt не зависит от конкретного списка шагов — её можно переиспользовать.

Как запустить в VS Code

  1. Создайте файл, например practice11.py.
  2. Скопируйте код одного из примеров.
  3. Откройте терминал в VS Code (Ctrl + `).
  4. Убедитесь, что активировано виртуальное окружение: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  5. Запустите: python practice11.py