Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов или возвращают функции как результат. Это позволяет создавать более модульный и масштабируемый код, поскольку функции могут быть легко комбинированы и переиспользованы. В Python, функции являются объектами первого класса, что означает, что они могут быть переданы и возвращены, как и любые другие объекты.
Примеры функций высшего порядка
Рассмотрим несколько примеров функций высшего порядка в Python.
Функция map
Функция map
принимает функцию и итерируемый объект (например, список) и применяет данную функцию ко всем элементам итерируемого объекта. В результате получаем объект-итератор, который содержит результаты применения функции.
def square(x): return x * x numbers = [1, 2, 3, 4, 5] squares = map(square, numbers) print(list(squares)) # [1, 4, 9, 16, 25]
Функция filter
Функция filter
принимает функцию-предикат и итерируемый объект, проходит по каждому элементу итерируемого объекта и возвращает новый итератор, состоящий только из тех элементов, для которых функция-предикат вернула True
.
def is_even(x): return x % 2 == 0 numbers = [1, 2, 3, 4, 5, 6] even_numbers = filter(is_even, numbers) print(list(even_numbers)) # [2, 4, 6]
Функция, возвращающая функцию
Функции высшего порядка могут также возвращать другие функции. Это полезно, когда вы хотите создать функцию с некоторыми предустановленными параметрами.
def make_multiplier(factor): def multiplier(x): return x * factor return multiplier double = make_multiplier(2) triple = make_multiplier(3) print(double(4)) # 8 print(triple(4)) # 12
Замыкания и декораторы
Функции высшего порядка тесно связаны с понятием замыканий и декораторов в Python. Замыкание — это функция, которая «запоминает» окружение, в котором была определена, даже если оно уже не существует. Декораторы — это способ изменить поведение функции или класса, обернув его в другую функцию или класс.
def make_greeting_decorator(greeting): def decorator(func): def wrapper(name): return f"{greeting}, {func(name)}!" return wrapper return decorator @make_greeting_decorator("Hello") def greet(name): return name print(greet("John")) # Hello, John!
В этом примере, мы создали декоратор make_greeting_decorator
, который добавляет приветствие к результату вызова функции greet
.
Теперь вы знаете, что такое функции высшего порядка в Python, и как их использовать для создания более модульного и масштабируемого кода. 😊
Добавить комментарий