Глава 13 · Автоматизация с помощью функций

Вход, работа, выход: чистые функции

Не каждая функция обязана что-то возвращать — но полезно чётко понимать, ради чего написана каждая конкретная функция: ради результата или ради эффекта.

Универсальная модель функции

ПАРАМЕТРЫвходФУНКЦИЯалгоритмRETURNвыход
Параметры → тело функции → return — модель, применимая к любой функции с результатом
ПримерВходВыход
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
ВХОДФУНКЦИЯВЫХОД
Чистая функция: только вход → результат
ВХОДФУНКЦИЯвыход / эффектэкран, Turtle,мутация...
Функция с побочным эффектом: результат ИЛИ/И эффект вовне
Почему чистые функции удобны
Легче понимать
результат зависит только от входа
Легче тестировать
не нужен экран/файл/сеть — просто вызов
Предсказуемость
один и тот же вход → всегда один и тот же выход
Не каждая функция ДОЛЖНА быть чистой
Графика, ввод/вывод, работа с интерфейсом — всё это по своей природе требует побочных эффектов. Чистота — полезное свойство там, где оно естественно, а не универсальное правило, которому обязана подчиняться каждая функция программы.
Практика: чистые функции vs функции с побочным эффектом
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →