⚖️ Старый подход и современная практика

⚡ Кратко: old-vs-new

Функция - именованный блок кода, который можно вызывать много раз.

def создаёт функцию, pass временно оставляет обязательный блок пустым.

При вызове функции позиционные аргументы сопоставляются по порядку, именованные - по названию параметра.

Аргументы по умолчанию пишутся после обязательных параметров.

*args собирает лишние позиционные аргументы в tuple, **kwargs - именованные аргументы в dict.

return завершает функцию и возвращает значение; без return результатом будет None.

LEGB описывает поиск имён: Local, Enclosing, Global, Built-in.

global нужен только для изменения глобальной переменной, но чаще лучше передавать данные параметрами.

Топ-3 ошибки: передавать не то количество аргументов; ожидать значение от функции, где нет return; менять global там, где достаточно параметров и return.

Учебный/наивный подходСовременный вариантПочему так
Писать весь код на верхнем уровне файла.Выносить повторяемые действия в функции.Функции упрощают чтение, тестирование и повторное использование.
Использовать global для передачи временных данных.Передавать значения параметрами и возвращать результат через return.Так функция меньше зависит от внешнего состояния.
Называть функции total, data, process без контекста.Использовать глагольные snake_case имена: calculate_total, filter_strings.PEP 8 и читаемость важнее краткости.
Проверить по документации: рекомендации по стилю и стандартной библиотеке могут уточняться в новых версиях Python.