📝 Python

Как функции работают вместе в Python 🧩

P
Автор
PyLand Team
📅
Опубликовано
09.08.2026
⏱️
Время чтения
2 мин
👁️
Просмотров
78
🌱
Уровень
Начальный

Небольшая функция обычно решает одну понятную задачу. Но настоящая программа состоит из нескольких задач: получить данные, обработать их, показать результат и сохранить итог.

Вместо одной огромной функции можно создать несколько маленьких и соединить их обычными вызовами.

🧱 Одна функция — одна задача

Начнём с двух независимых функций:

def calculate_total(price, delivery):
    return price + delivery


def show_total(total):
    print(f"Итого: {total}")

Первая функция считает и возвращает число. Вторая получает готовое число и отвечает только за вывод.

Так проще проверять программу:

total = calculate_total(500, 100)
show_total(total)

Маршрут данных выглядит так:

500 и 100 → calculate_total() → 600 → show_total()

🔁 Результат одной функции становится аргументом другой

Значение после return можно сохранить в переменную и передать следующей функции:

def double(number):
    return number * 2


def make_label(number):
    return f"Результат: {number}"


doubled = double(7)
label = make_label(doubled)
print(label)

Каждая строка показывает отдельный этап. Для начинающего такой вариант понятнее, чем соединять несколько вызовов в одном выражении.

📦 Функция может передавать словарь

Если результат состоит из нескольких связанных значений, функция может вернуть словарь:

def inspect_device(name, errors):
    score = errors * 10
    return {
        "name": name,
        "score": score,
    }

Следующая функция читает нужные поля:

def show_result(result):
    print(f"{result['name']}: {result['score']}")


inspection = inspect_device("SENSOR", 2)
show_result(inspection)

Исходные данные и результат лучше хранить отдельно: функция анализа не должна незаметно менять переданный словарь.

🎛️ Функция-координатор

Когда порядок действий уже понятен, его можно вынести в функцию-координатор. Она не повторяет вычисления, а вызывает готовые функции в нужной последовательности:

def run_check(name, errors):
    result = inspect_device(name, errors)
    show_result(result)

Теперь один вызов запускает весь маршрут:

run_check("SENSOR", 2)

Координатор отвечает на вопрос «что выполнить и в каком порядке», а остальные функции — «как выполнить отдельную операцию».

Хороший координатор:

  • вызывает готовые функции;
  • сохраняет их результаты в понятные переменные;
  • передаёт результаты дальше;
  • не копирует внутренние алгоритмы этих функций.

🔄 Координатор и цикл

Если нужно обработать несколько одинаковых записей, координатор может использовать цикл:

def run_all_checks(devices):
    for device in devices:
        result = inspect_device(device["name"], device["errors"])
        show_result(result)

Функция inspect_device() по-прежнему проверяет только одно устройство. Цикл находится в координаторе, потому что именно он управляет всем сценарием.

🧭 Меню вызывает готовые функции

Меню — ещё один координатор. Оно получает команду пользователя и выбирает готовое действие:

def show_report():
    print("Отчёт открыт")


def show_help():
    print("Справка открыта")


def handle_choice(choice):
    if choice == "1":
        show_report()
    elif choice == "2":
        show_help()
    else:
        print("Неизвестная команда")

Внутри веток нет кода построения отчёта или справки — только вызовы. Если поведение отчёта изменится, достаточно исправить show_report(), не переписывая меню.

⚠️ Частые ошибки

Функция вызвана до объявления

Python выполняет файл сверху вниз. Объявляй функцию выше места её первого вызова.

Результат return потерян

Если значение понадобится дальше, сохрани его:

result = inspect_device("SENSOR", 2)

Координатор повторяет алгоритмы

Не копируй расчёт внутрь run_check(). Вызови calculate или inspect-функцию, которая уже отвечает за него.

Одна функция делает всё

Если функция одновременно запрашивает ввод, рассчитывает, печатает, изменяет список и управляет меню, её трудно проверять. Раздели независимые задачи.

✅ Пошаговая проверка

  1. Запусти каждую небольшую функцию отдельно.
  2. Проверь её возвращаемое значение.
  3. Соедини две функции через переменную.
  4. Создай координатор только после проверки частей.
  5. Убедись, что общий результат не изменился.

🎯 Итог

  • одна функция может вызвать другую;
  • результат return становится аргументом следующего вызова;
  • словарь удобно передаёт несколько связанных результатов;
  • координатор управляет порядком, но не копирует алгоритмы;
  • меню выбирает и вызывает уже готовые операции.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

map() — Преобразуй каждый элемент!

Функция map() лениво применяет преобразование к каждому элементу итерируемого объекта.

📅 03.04.2026 👁️ 428
📝

filter() — Отбери нужное!

Функция filter() оставляет элементы, для которых проверка возвращает истинное значение.

📅 03.04.2026 👁️ 428
📝

Lambda функции

Lambda — маленькая анонимная функция в одну строку.

📅 03.04.2026 👁️ 415
🎓 Продолжить обучение

В каких курсах используется этот материал

Перейдите к курсу, чтобы закрепить материал на практике.

Python с нуля: 7 практических проектов Открыть программу курса