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

Функции как объекты

Функция — такой же объект, как список или строка: её можно сохранить под другим именем, положить в словарь, передать другой функции.

Функцию можно сохранить под другим именем

Вернёмся к различию из §13.2 — greet и greet() — и пойдём на шаг дальше:

funkciya_kak_obekt.py
def greet(name):
    return f"Привет, {name}"

action = greet

print(action("Anna"))   # Привет, Anna
greetactionФУНКЦИЯ-ОБЪЕКТ
greet и action — два имени одного и того же объекта функции, точно как с любым другим объектом (глава 3)
Это то же самое aliasing, что и всегда
action = greet не копирует функцию и не создаёт вторую — оба имени указывают на один и тот же объект функции. Функции в Python — это объекты первого класса: их можно сохранять в переменных, класть в коллекции, передавать в другие функции — как любые другие значения.

Функции в коллекциях

funkcii_v_slovare.py
def double(x):
    return x * 2

def square(x):
    return x ** 2

operations = {
    "double": double,
    "square": square,
}

operation = operations["square"]
result = operation(5)
print(result)   # 25
Словарь функций + глава 11
operations — обычный словарь (глава 11), просто хранящий не числа и не строки, а объекты функций.

Передача функции как аргумента

Вы уже это делали, даже не задумываясь:

sorted_key.py
words = ["python", "я", "программирование"]
print(sorted(words, key=len))
словоlen(слово)ключ сортировкипорядокпо этому ключу
sorted() вызывает переданную функцию len для каждого элемента, чтобы получить ключ сортировки
len — это ФУНКЦИЯ-ОБЪЕКТ, а не результат её вызова
key=len передаёт саму функцию len — БЕЗ скобок. sorted() сама вызовет len(...) для каждого элемента, когда придёт время сравнивать. Если написать key=len() — это была бы попытка вызвать len прямо сейчас, без аргумента, что приведёт к ошибке.

Термин: функция высшего порядка

Функция, которая принимает другую функцию как аргумент (как sorted()) или возвращает функцию (как make_greeter() из §13.13), называется функцией высшего порядка. Специальная теория функционального программирования здесь не нужна — достаточно узнавать этот паттерн, когда он встречается.

Практика: функции как объекты первого класса
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →