> В чем разница функции и процедуры (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: TrueEngineering

Стек: Python

> Пример ответа

Короткий ответ

В Python формальной разницы нет: и функция, и процедура - это def. Однако в классическом понимании процедура - это подпрограмма, которая выполняет действия и не возвращает значение (в Python - возвращает None), а функция - возвращает результат, который можно использовать в выражениях. В Python процедура - это частный случай функции, где return отсутствует или вызывается без аргумента.

Подробное объяснение

В языках типа Pascal или Basic различие было жёстким: процедура - для side effects, функция - для вычислений. В Python это размыто, потому что:

  • Любая def в Python - это объект, который всегда возвращает значение. Если return не указан, возвращается None.
  • None - полноценное значение, его можно присваивать, передавать, сравнивать.
  • Python не запрещает функции с side effects (изменение глобального состояния, запись в файл, вывод в консоль) и не требует, чтобы функции были чистыми.

Семантически различие остаётся на уровне договорённостей:

  • Функция - ожидается, что она возвращает осмысленный результат, и её вызов используется в выражении: result = calculate(x) + 1.
  • Процедура - вызывается ради побочного эффекта, возвращаемое значение игнорируется или не используется: print_log(message), save_to_db(item).

В Python это влияет на стиль кода и читаемость, но не на синтаксис. Интерпретатор не различает их.

На практике

Для backend-разработчика на Python различие важно при проектировании API и внутренних сервисов:

  • Если метод возвращает данные - оформляй как функцию с явным return.
  • Если метод только выполняет действие (запись в БД, отправка сообщения, логирование) - оформляй как процедуру, но в Python это будет функция, возвращающая None. В таких случаях принято не использовать возвращаемое значение.
  • В Python есть соглашение: если функция что-то возвращает, это должно быть задокументировано в docstring и аннотации типа. Если возвращает None - это сигнал, что перед нами процедура.
  • Для чистоты кода процедуры часто называют глаголами в повелительном наклонении: send_email, update_cache, flush_buffer. Функции - существительными или фразами с вопросом: get_user, is_valid, compute_total.

Пример кода

PYTHON
# Функция - возвращает результат
def calculate_discount(price: float, percent: float) -> float:
return price * (1 - percent / 100)
# Процедура - выполняет действие, возвращает None
def log_payment(user_id: int, amount: float) -> None:
with open("payments.log", "a") as f:
f.write(f"{user_id}: {amount}\n")
# Использование
discounted = calculate_discount(1000, 10) # результат используется
log_payment(42, discounted) # возвращаемое значение не используется

Как отвечать на собеседовании

Начни с формального определения: в Python нет синтаксического различия, есть только семантическое. Затем приведи пример из классических языков для контекста. Подчеркни, что в Python процедура - это функция, возвращающая None, и что это осознанный дизайн языка. Упомяни, что на практике различие влияет на читаемость и проектирование интерфейсов, но не на поведение интерпретатора. Если спросят про чистые функции - свяжи с этим понятием, но не уходи в теорию функционального программирования без необходимости.

Что проверяет интервьюер

  • Понимание базовых концепций языков программирования, а не только синтаксиса Python.
  • Умение различать терминологию и адаптировать её к конкретному языку.
  • Осознание роли None и соглашений о возвращаемых значениях.
  • Способность объяснить, как это влияет на проектирование API и читаемость кода.
  • Глубину: senior должен упомянуть, что в Python это вопрос стиля и конвенций, а не строгой типизации.

Типичные ошибки

  • Утверждение, что в Python процедур нет вообще - это неверно, они есть как подмножество функций.
  • Попытка провести жёсткую границу, как в Pascal - в Python это не работает.
  • Игнорирование None как возвращаемого значения - многие забывают, что процедура в Python всё равно возвращает None.
  • Смешение понятий "процедура" и "чистая функция" - это разные оси: чистота - про отсутствие side effects, процедура - про отсутствие полезного возвращаемого значения.
  • Ответ без примеров - для senior ожидается конкретика из практики backend-разработки.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью