Что такое функция высшего порядка в Python

Ответ

Функция высшего порядка (Higher-Order Function) — это функция, которая соответствует хотя бы одному из следующих критериев:

  1. Принимает одну или несколько функций в качестве аргументов.
  2. Возвращает другую функцию в качестве результата.

Это ключевая концепция функционального программирования, которая позволяет создавать более гибкий, модульный и переиспользуемый код.

Пример 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+ 🔞

Да ты посмотри, какая хитрая жопа эти функции высшего порядка! Это ж не просто функция, это, блядь, такой функциональный аристократ, который других функций либо принимает в гости, либо, сука, сам плодит их как кроликов! Два главных признака, запомни, как своё ебало:

  1. Принимает другие функции как аргументы — типа, "заходи, дружок-функция, поработай за меня".
  2. Возвращает новую функцию как результат — типа, "на, вот тебе свежеиспечённая функция, только из духовки, пользуйся на здоровье".

Это основа основ, если ты хочешь писать код не как обезьяна с гранатой, а с намёком на элегантность, блядь.

Пример первый: Функция как подарочек на вход

Смотри, встроенная функция 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() или эти ваши модные декораторы — так вот, это всё они, блядь, функции высшего порядка! Они везде, эти хитрожопые ублюдки, просто ты раньше не замечал.