Глава 13 · Автоматизация с помощью функций
Вход, работа, выход: чистые функции
Не каждая функция обязана что-то возвращать — но полезно чётко понимать, ради чего написана каждая конкретная функция: ради результата или ради эффекта.
Универсальная модель функции
| Пример | Вход | Выход |
|---|---|---|
convert_temperature | градусы Цельсия | градусы Фаренгейта |
normalize | сырой текст | очищенный текст |
calculate_average | список чисел | одно число |
Два законных вида функций
Не каждая функция обязана возвращать значение — у функций есть две законные роли:
| Функция-команда / эффект | Функция-вычисление |
|---|---|
show_menu(), draw_square(), print_report() | area(...), normalize(...), average(...) |
| главная цель — эффект (вывод, рисование) | главная цель — вернуть значение |
Оба вида — легитимны
Не каждая функция обязана что-то возвращать осмысленное —
draw_square() вполне нормальна, даже если она ничего не return-ит: её работа — эффект на экране, а не значение.Побочный эффект
Побочный эффект — это когда функция меняет что-то ВНЕ своего возвращаемого результата: печатает на экран, рисует Turtle, мутирует переданный список, позже — пишет в файл.
storonnij_effekt.py
def add_item(items):
items.append("Python") # побочный эффект: мутирует переданный список
Чистые функции
Чистая функция — результат зависит только от аргументов, и функция намеренно ничего не меняет вне себя:
chistaya_funkciya.py
def rectangle_area(width, height):
return width * height
Почему чистые функции удобны
Легче понимать
результат зависит только от входа
Легче тестировать
не нужен экран/файл/сеть — просто вызов
Предсказуемость
один и тот же вход → всегда один и тот же выход
Не каждая функция ДОЛЖНА быть чистой
Графика, ввод/вывод, работа с интерфейсом — всё это по своей природе требует побочных эффектов. Чистота — полезное свойство там, где оно естественно, а не универсальное правило, которому обязана подчиняться каждая функция программы.
Практика: чистые функции vs функции с побочным эффектом
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки