Небольшая функция обычно решает одну понятную задачу. Но настоящая программа состоит из нескольких задач: получить данные, обработать их, показать результат и сохранить итог.
Вместо одной огромной функции можно создать несколько маленьких и соединить их обычными вызовами.
🧱 Одна функция — одна задача
Начнём с двух независимых функций:
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-функцию, которая уже отвечает за него.
Одна функция делает всё
Если функция одновременно запрашивает ввод, рассчитывает, печатает, изменяет список и управляет меню, её трудно проверять. Раздели независимые задачи.
✅ Пошаговая проверка
- Запусти каждую небольшую функцию отдельно.
- Проверь её возвращаемое значение.
- Соедини две функции через переменную.
- Создай координатор только после проверки частей.
- Убедись, что общий результат не изменился.
🎯 Итог
- одна функция может вызвать другую;
- результат
returnстановится аргументом следующего вызова; - словарь удобно передаёт несколько связанных результатов;
- координатор управляет порядком, но не копирует алгоритмы;
- меню выбирает и вызывает уже готовые операции.
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!