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

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

# example.py
def greet(name: str) -> str:
    """Возвращает приветствие."""
    return f"Hello, {name}!"


print(greet("Alice"))
print(help(greet))

Пример 1. Docstring и help()

# docstring_example.py
def greet(name: str) -> str:
    """Возвращает строку приветствия.

    :param name: Имя пользователя.
    :return: Приветственное сообщение.
    """
    return f"Hello, {name}!"


print(greet("Alice"))
print(greet.__doc__)
help(greet)

Пример 2. Аннотации типов

# type_hints_example.py
def add(a: int, b: int) -> int:
    """Возвращает сумму двух целых чисел."""
    return a + b


def convert_to_celsius(fahrenheit: float) -> float:
    """Конвертирует температуру из Фаренгейта в Цельсий."""
    return (fahrenheit - 32) * 5 / 9


def is_even(number: int) -> bool:
    """Определяет, является ли число чётным."""
    return number % 2 == 0


def log_message(message: str) -> None:
    """Выводит сообщение в консоль."""
    print(f"LOG: {message}")


print(add(3, 5))
print(convert_to_celsius(68.0))
print(is_even(4))
log_message("start")

Пример 3. Инверсия словаря

# invert_dict.py
original_dict = {"a": 1, "b": 2, "c": 3}
inverted_dict = {value: key for key, value in original_dict.items()}
print("Инверсированный словарь:", inverted_dict)

Пример 4. Замена чисел на слова

# numbers_to_words.py
number_to_word = {1: "один", 2: "два", 3: "три"}
data = {"x": 1, "y": 2, "z": 3}

translated = {
    key: number_to_word.get(value, value)
    for key, value in data.items()
}
print(translated)

Пример 5. Факториал

# factorial.py
def factorial(n: int) -> int:
    """Возвращает факториал неотрицательного целого числа."""
    if n == 0 or n == 1:
        return 1
    return n * factorial(n - 1)


print(factorial(5))  # 120

Пример 6. Бинарный поиск

# binary_search.py
from typing import Optional


def binary_search(
    arr: list[int],
    target: int,
    left: int,
    right: int
) -> Optional[int]:
    """Ищет target в отсортированном списке arr. Возвращает индекс или None."""
    if left > right:
        return None
    mid = (left + right) // 2
    if arr[mid] == target:
        return mid
    if arr[mid] < target:
        return binary_search(arr, target, mid + 1, right)
    return binary_search(arr, target, left, mid - 1)


array = [1, 3, 5, 7, 9, 11, 13]
print(binary_search(array, 5, 0, len(array) - 1))   # 2
print(binary_search(array, 13, 0, len(array) - 1))  # 6
print(binary_search(array, 8, 0, len(array) - 1))   # None

Пример 7. Хвостовая рекурсия и итерация

# tail_vs_iterative.py
def factorial_tail(n: int, accumulator: int = 1) -> int:
    """Хвостовая рекурсия (не оптимизируется в Python)."""
    if n == 0 or n == 1:
        return accumulator
    return factorial_tail(n - 1, n * accumulator)


def factorial_iterative(n: int) -> int:
    """Итеративный факториал."""
    accumulator = 1
    while n > 1:
        accumulator *= n
        n -= 1
    return accumulator


print(factorial_tail(5))
print(factorial_iterative(5))

Пример 8. Собственный аналог deepcopy

# custom_deepcopy.py
def deep_copy(data):
    """Рекурсивно копирует списки, кортежи, множества и словари."""
    if isinstance(data, list):
        return [deep_copy(item) for item in data]
    if isinstance(data, dict):
        return {key: deep_copy(value) for key, value in data.items()}
    if isinstance(data, set):
        return {deep_copy(item) for item in data}
    if isinstance(data, tuple):
        return tuple(deep_copy(item) for item in data)
    return data


original = [[1, 2], (4, [5, 6], {7, 8}), {"a": 9, "b": [10, 11]}]
copied = deep_copy(original)
original[1][1][0] = 0
print("Оригинал:", original)
print("Копия:   ", copied)

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

  1. Создайте файл, например summary_12_examples.py.
  2. Скопируйте код одного из примеров выше.
  3. Откройте терминал в VS Code (Ctrl + `).
  4. Убедитесь, что активировано виртуальное окружение.
  5. Запустите: python summary_12_examples.py