Функция reduce()
- это функция высшего порядка, которая последовательно применяет другую функцию (обычно двухместную, принимающую два аргумента) к элементам итерируемого объекта (списка, кортежа и т.д.), редуцируя итерируемый объект к единственному результирующему значению.
lambda
- это способ создать анонимную (безымянную) функцию "на лету". Это однострочное выражение, которое возвращает функцию. Оно особенно полезно, когда требуется небольшая, простая функция, которая будет использоваться только один раз или передаваться в качестве аргумента другой функции.
В связке с reduce()
, lambda
предоставляет элегантный и компактный способ определить логику "редукции" непосредственно внутри вызова reduce()
, без необходимости определять отдельную именованную функцию.
Принцип работы:
reduce()
принимает два основных аргумента: lambda
-функцию и итерируемый объект. Опционально, можно передать третий аргумент - начальное значение (initializer).reduce()
берет первые два элемента итерируемого объекта и передает их в lambda
-функцию в качестве аргументов.lambda
-функция выполняет операцию над этими двумя элементами и возвращает результат.lambda
-функции, а следующий элемент итерируемого объекта становится вторым аргументом.lambda
-функции вместе с первым элементом итерируемого объекта.reduce()
возвращает окончательный результат, полученный после всех итераций.Пример:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# Суммирование всех чисел в списке, используя lambda и reduce()
sum_of_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_of_numbers) # Output: 15
В этом примере:
lambda x, y: x + y
- это lambda
-функция, которая принимает два аргумента (x
и y
) и возвращает их сумму.reduce(lambda x, y: x + y, numbers)
- reduce()
применяет эту lambda
-функцию к списку numbers
.Альтернатива без lambda:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
def add(x, y):
return x + y
sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers) # Output: 15
Использование lambda
делает код более компактным и читаемым в тех случаях, когда логика редукции проста и не требует отдельной именованной функции.
Важно помнить: начиная с Python 3, функция reduce()
была перенесена из встроенных функций в модуль functools
, поэтому необходимо импортировать ее: from functools import reduce
.