| Учебный/наивный подход | Современный вариант | Почему так |
|---|---|---|
| Писать весь код на верхнем уровне файла. | Выносить повторяемые действия в функции. | Функции упрощают чтение, тестирование и повторное использование. |
| Использовать global для передачи временных данных. | Передавать значения параметрами и возвращать результат через return. | Так функция меньше зависит от внешнего состояния. |
| Называть функции total, data, process без контекста. | Использовать глагольные snake_case имена: calculate_total, filter_strings. | PEP 8 и читаемость важнее краткости. |
⚖️ Старый подход и современная практика
⚡ Кратко: old-vs-new
Функция - именованный блок кода, который можно вызывать много раз.
def создаёт функцию, pass временно оставляет обязательный блок пустым.
При вызове функции позиционные аргументы сопоставляются по порядку, именованные - по названию параметра.
Аргументы по умолчанию пишутся после обязательных параметров.
*args собирает лишние позиционные аргументы в tuple, **kwargs - именованные аргументы в dict.
return завершает функцию и возвращает значение; без return результатом будет None.
LEGB описывает поиск имён: Local, Enclosing, Global, Built-in.
global нужен только для изменения глобальной переменной, но чаще лучше передавать данные параметрами.
Топ-3 ошибки: передавать не то количество аргументов; ожидать значение от функции, где нет return; менять global там, где достаточно параметров и return.