В чем разница функции и процедуры
Что проверяют
Базовое понимание того, зачем разделение вообще существует. Формально в Python процедуры нет как отдельной конструкции, и хороший ответ начинается именно с этого.
Как отвечать
В классической терминологии функция вычисляет и возвращает значение, процедура выполняет действие и ничего не возвращает.
В Python синтаксически есть только def. Функция без явного return возвращает None, и такую функцию по смыслу называют процедурой:
def save(order): # процедура по смыслу: делает, ничего не возвращает
db.insert(order)
def total(order): # функция: считает и возвращает
return sum(i.price for i in order.items)Смысловая часть, которую и хотят услышать: функция не должна менять состояние системы. Функция, которая внутри себя пишет в базу, ломает ожидание вызывающего, потому что выражение в коде выглядит безобидным вычислением. Разделение это не синтаксис, а контракт: одно отвечает на вопрос, другое совершает действие.
Отсюда практика: чистые функции (результат зависит только от аргументов, побочных эффектов нет) легко тестировать и кэшировать, поэтому логику расчёта отделяют от записи.
Где спотыкаются
Останавливаются на «функция возвращает значение» и не говорят про побочные эффекты.
Не знают, что функция без return возвращает None, а не «ничего».
Смешивают расчёт и запись в одной функции, а потом не могут написать тест без базы.
Не могут объяснить, что такое чистая функция и зачем она нужна.