Ответ
Функция высшего порядка (Higher-Order Function) — это функция, которая соответствует хотя бы одному из следующих критериев:
- Принимает одну или несколько функций в качестве аргументов.
- Возвращает другую функцию в качестве результата.
Это ключевая концепция функционального программирования, которая позволяет создавать более гибкий, модульный и переиспользуемый код.
Пример 1: Функция как аргумент
Встроенная функция sorted() может принимать функцию key для определения логики сортировки.
words = ["яблоко", "груша", "киви", "банан"]
# Сортируем по длине слова, передавая функцию len в качестве аргумента
sorted_by_length = sorted(words, key=len)
print(sorted_by_length)
# Вывод: ['киви', 'груша', 'банан', 'яблоко']
Здесь sorted — функция высшего порядка, а len — функция, переданная как аргумент.
Пример 2: Функция как результат
Можно создать "фабрику функций", которая генерирует и возвращает новые функции.
def power_factory(exponent):
"""Фабрика, создающая функции для возведения в степень."""
def power(base):
return base ** exponent
return power
# Создаем функцию, которая возводит в квадрат
square = power_factory(2)
# Создаем функцию, которая возводит в куб
cube = power_factory(3)
print(f"5 в квадрате = {square(5)}") # Вывод: 5 в квадрате = 25
print(f"5 в кубе = {cube(5)}") # Вывод: 5 в кубе = 125
Здесь power_factory — функция высшего порядка.
В Python к функциям высшего порядка также относятся map(), filter() и декораторы.
Ответ 18+ 🔞
Да ты посмотри, какая хитрая жопа эти функции высшего порядка! Это ж не просто функция, это, блядь, такой функциональный аристократ, который других функций либо принимает в гости, либо, сука, сам плодит их как кроликов! Два главных признака, запомни, как своё ебало:
- Принимает другие функции как аргументы — типа, "заходи, дружок-функция, поработай за меня".
- Возвращает новую функцию как результат — типа, "на, вот тебе свежеиспечённая функция, только из духовки, пользуйся на здоровье".
Это основа основ, если ты хочешь писать код не как обезьяна с гранатой, а с намёком на элегантность, блядь.
Пример первый: Функция как подарочек на вход
Смотри, встроенная функция sorted() — она же не дура, она может сортировать как угодно, если ты ей подскажешь. А подсказываешь ты ей, передавая другую функцию! Вот смотри, как просто:
words = ["яблоко", "груша", "киви", "банан"]
# Сортируем по длине слова, передавая функцию len в качестве аргумента
sorted_by_length = sorted(words, key=len)
print(sorted_by_length)
# Вывод: ['киви', 'груша', 'банан', 'яблоко']
Вот тут sorted — это и есть наша цаца, функция высшего порядка. А len — это та самая бедная родственница, которую засунули в аргументы, чтобы работала. "Отсортируй мне всё по длине, len, да побыстрее!" — и она отсортировала. Красота, ёпта!
Пример второй: Функция как результат — фабрика по производству функций
А это вообще, блядь, магия чистой воды! Мы можем сделать функцию, которая будет штамповать другие функции, как горячие пирожки!
def power_factory(exponent):
"""Фабрика, создающая функции для возведения в степень."""
def power(base):
return base ** exponent
return power
# Создаем функцию, которая возводит в квадрат
square = power_factory(2)
# Создаем функцию, которая возводит в куб
cube = power_factory(3)
print(f"5 в квадрате = {square(5)}") # Вывод: 5 в квадрате = 25
print(f"5 в кубе = {cube(5)}") # Вывод: 5 в кубе = 125
Представляешь? power_factory — это как станок. Сказал ему: "Хочу станок для квадратов!" — получил функцию square. Сказал: "А теперь для кубов!" — получил cube. Он внутри себя лепит новую функцию power и выдает её тебе, как будто так и надо. Вообще охуенно удобно, когда нужно много однотипных действий, но с разными параметрами.
Кстати, если ты где-то видел map(), filter() или эти ваши модные декораторы — так вот, это всё они, блядь, функции высшего порядка! Они везде, эти хитрожопые ублюдки, просто ты раньше не замечал.