Глава 13 · Автоматизация с помощью функций
Функции как объекты
Функция — такой же объект, как список или строка: её можно сохранить под другим именем, положить в словарь, передать другой функции.
Функцию можно сохранить под другим именем
Вернёмся к различию из §13.2 — greet и
greet() — и пойдём на шаг дальше:
funkciya_kak_obekt.py
def greet(name):
return f"Привет, {name}"
action = greet
print(action("Anna")) # Привет, Anna
Это то же самое 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 — это ФУНКЦИЯ-ОБЪЕКТ, а не результат её вызова
key=len передаёт саму функцию len — БЕЗ скобок. sorted() сама вызовет len(...) для каждого элемента, когда придёт время сравнивать. Если написать key=len() — это была бы попытка вызвать len прямо сейчас, без аргумента, что приведёт к ошибке.Термин: функция высшего порядка
Функция, которая принимает другую функцию как аргумент (как sorted())
или возвращает функцию (как make_greeter() из §13.13), называется
функцией высшего порядка. Специальная теория функционального
программирования здесь не нужна — достаточно узнавать этот паттерн, когда он встречается.
Практика: функции как объекты первого класса
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки