Python: функции и передача аргументов
начните с входа функции. Назовите параметры так, чтобы по вызову было понятно, какие данные передаются.
Читать материалВыделяйте функцию вокруг одного понятного действия: определите входные параметры, возвращаемый результат и проверяемое поведение. После проверки перенесите её в модуль для повторного использования. Само перемещение строк в другой файл ещё не делает код модульным: важно, чтобы функцию можно было использовать без скрытой подготовки.
Выберите инструкцию под свою задачу. Ниже — подробный разбор выбора и проверки результата.
начните с входа функции. Назовите параметры так, чтобы по вызову было понятно, какие данные передаются.
Читать материалотделите результат от его отображения. Печать на экране и возвращение значения вызывающему коду решают разные задачи.
Читать материалпереносите сюда уже понятное действие. Проверьте импорт из другого файла проекта.
Читать материалиспользуйте для сохранения ожидаемого поведения при последующих правках. Инструмент выбирайте после определения самих примеров.
Читать материалХорошая проверка границы — попросить другого человека назвать назначение функции по её имени, параметрам и примеру результата. Если для объяснения приходится открывать несколько посторонних участков программы, часть зависимости осталась скрытой. Не обязательно сразу усложнять архитектуру: иногда достаточно передать недостающий параметр явно и сохранить небольшой проверенный пример использования.
| Шаг | Что определить | Проверка |
|---|---|---|
| Параметры | Какие данные нужны действию | Их можно передать явно |
| Результат | Что получает вызывающий код | Результат можно сравнить с ожидаемым |
| Модуль | Где хранится повторно используемая часть | Её можно импортировать |
| Тест | Какое поведение должно сохраняться | Примеры проходят после изменения кода |
Возьмите участок, который повторяется в двух местах. Сравните не только похожие строки, но и их смысл. Если в обоих случаях рассчитывается одна и та же величина по одному правилу, можно выделить общее действие. Если сходство только внешнее, попытка объединить их может добавить лишние переключатели и запутать назначение функции.
Например, расчёт общей стоимости и оформление строки для печати лучше сначала рассмотреть как отдельные действия. Числовой результат может понадобиться в другом расчёте, а строка — только в интерфейсе. Разделение позволяет проверить математику независимо от того, как она показывается пользователю.
Запишите обычный вход, граничный случай и явно недопустимые данные, если функция должна их отвергать. Для каждого примера определите результат до запуска. Тест, который лишь повторяет вычисления реализации, может не заметить ошибку в общем правиле. Лучше использовать небольшой пример, который вы умеете проверить независимо.
Проверьте, изменяет ли функция переданный список или словарь. Если изменение задумано, отразите это в описании и примере. Если вызывающий код ожидает сохранения входа, случайное изменение объекта станет неожиданным побочным результатом. Явная договорённость полезнее общего обещания, что функция «обрабатывает данные».
После переноса в модуль повторите прежние примеры без изменения ожидаемых результатов. Затем вызовите функцию из нового места. Это помогает обнаружить зависимость от случайной переменной исходного файла. Если для импорта требуется сначала выполнить часть другой программы, границу функции и модуля стоит пересмотреть.
Начинайте с одного повторяющегося действия, а не с переписывания всего проекта. Когда функция имеет ясную границу и проверку, остальные участки легче сравнивать с ней и переносить по тому же принципу.