Олег Марков
Как передать функцию как аргумент в Python
Введение
В Python функции являются объектами, поэтому их можно передавать в другие функции как аргументы. Это позволяет создавать гибкие интерфейсы, уменьшать дублирование кода и применять функциональный стиль программирования.
В этой статье мы подробно рассмотрим, как передавать функции как аргументы, как это используется в стандартной библиотеке и на что обратить внимание при работе с такими конструкциями.
Если вы хотите детальнее погрузиться в работу с функциями в Python, включая передачу их как аргументы и функциональное программирование — приходите на наш курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажеры для практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Синтаксис передачи функции как аргумента
Функцию передают без скобок, чтобы передать сам объект функции, а не результат её вызова:
def greet(name):
return f"Hello, {name}!"
def executor(func, value):
return func(value)
print(executor(greet, "Alice")) # Hello, Alice!Здесь greet передается как объект в функцию executor.
Применение в стандартных функциях
map
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared) # [1, 4, 9, 16]Здесь lambda-функция передается как аргумент в map.
filter
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4]sorted с ключом
words = ["apple", "banana", "kiwi"]
sorted_words = sorted(words, key=len)
print(sorted_words) # ['kiwi', 'apple', 'banana']Функция len передана как аргумент key.
Пользовательские примеры
Фабрика функций
def make_multiplier(factor):
def multiply(x):
return x * factor
return multiply
double = make_multiplier(2)
triple = make_multiplier(3)
print(double(5)) # 10
print(triple(5)) # 15Здесь multiply может быть передана как аргумент другой функции или сохранена в переменной.
Логирование вызовов
def logger(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print(f"{func.__name__} вызвана с {args}, результат: {result}")
return result
return wrapper
def add(a, b):
return a + b
logged_add = logger(add)
logged_add(2, 3)
# add вызвана с (2, 3), результат: 5Функция add передана как аргумент в logger.
Частые ошибки
- Передача функции с вызовом (
func()) вместо объекта (func). - Ожидание, что функция автоматически выполнится внутри другой без явного вызова.
- Ошибки при передаче функций с параметрами без использования
lambdaили оберток.
Часто задаваемые вопросы
Можно ли передавать методы классов как аргументы? Да, методы экземпляров можно передавать, но помните про
self.Можно ли передавать несколько функций одновременно? Да, их можно хранить в списке или словаре и передавать как аргументы по отдельности.
Как отлаживать передачи функций? Используйте print, type() и callable() для проверки объектов, которые передаются.
Заключение
Передача функций как аргументов позволяет писать гибкий и переиспользуемый код. Этот приём широко используется в функциональном программировании, стандартных функциях Python и пользовательских паттернах.
Для системного изучения функций, передачи их как аргументов и функционального программирования рекомендую пройти курс Основы Python. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Python прямо сегодня.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

Основы Python
Антон Ларичев
Nest.js с нуля
Антон Ларичев