Главная / Блог / Что такое лямбда функции

Что такое лямбда функции
и как их использовать?

Что такое лямбда функции и как их использовать?

Smartiqa Failed Testsuits
Дата: 25 июля 2020
Автор: Антон Катин
Всему вокруг нас присвоено свое название. Названия помогают нам запоминать окружающий мир путем построения ассоциаций. Мир программирования - не исключение. Но обязательно ли это? Или мы можем оставить какой-то объект без собственного имени? Да, и Python позволяет нам создавать лямбда функции, также известные как анонимные функции.
В этой статье я расскажу вам об этой прекрасной возможности языка Python в следующем порядке:

  1. Что такое лямбда функции?
  2. Зачем нужны лямбда функции?
  3. Как написать лямбда функцию?
  4. Как лямбда функции уменьшают код?
  5. Лямбда функции в обычных функциях
  6. Использование лямбда функций в: filter(), map(), reduce()

Что такое лямбда функции?

Лямбда функции в Python – это такие функции, которые не имеют названия. Их также называют анонимными. Слово «lambda» является служебным, и не отражает сути конкретной функции.

Зачем нужны лямбда функции?

Основная причина применения лямбда функций — создание функции, которая используется в коде единожды. Использование таких функций позволяет снизить число строк кода, которые вам придется написать. Также лямбда функции известны как throw-away функции, которые используются вместе с filter(), map() и т. п.

Как написать лямбда функцию?

Создание лямбда функций происходит с помощью ключевого слова lambda следующим образом:
lambda <аргумент(ы)>: <выражение>
Лямбда функции могут иметь сколько угодно аргументов или не иметь их вовсе, но обязательно должны содержать лишь одно выражение. В следующем примере создается лямбда функция без аргументов и при вызове возвращает строку:
Пример - Python
lambda: «Просто строка»
А в этом примере создается лямбда функция с одним аргументом param и при вызове возвращает строку:
Пример - Python
lambda param: «Просто строка, но уже с обязательным аргументом param»
Ниже я приведу несколько учебных примеров применения лямбда функций:
Python - Интерактивный режим
# Пример 1
>>> square = lambda a: a*a
>>> square(5)
25

# Пример 2
>>> add = lambda a,b: a+b
>>> add(7, 13)
20
В обоих примерах вы могли подметить для себя, что используется разное количество аргументов, но везде есть только одно выражение. Не стоит забывать, что лямбда функции, в отличие от обычных методов, могут содержать только те выражения, которые вы можете уместить в одну строку.

Как лямбда функции уменьшают код?

Прежде чем говорить о лямбда функциях, давайте вспомним синтаксис обычных методов в Python:
Пример - Python
def function_name(<args>):
    <function_body>
Читайте также
Функции, условные выражения и циклы в Python
Как вы могли подметить, объявление лямбда функции априори требует меньше места (1 строка кода), чем обычной функции (2 строки кода). Давайте повторим функционал лямбда функции, которую мы написали в прошлом примере:
Python - Интерактивный режим
>>> def square(a):
...     return a*a
... 
>>> square(5)
25
Как вы видите, в примере выше нам требуется написать return, чтобы получить результат работы метода. Лямбда функции, в свою очередь, не требуют табуляции и легко умещаются в одну строку.
Smartiqa лямбда функции
В любом случае, лямбда функцию необходимо присвоить какой-либо переменной, чтобы ее впоследствии вызвать.

«Какая же это анонимная функция?» - спросите вы. «Ведь она теперь ассоциируется с какой-то переменной и имеет собственное название». Это резонный вопрос. Однако суть в том, что такое использование лямбда функций является неправильным.

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

Лямбда функции в обычных функциях

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

Пример ниже состоит из обычной функции add(), которая принимает один аргумент a. Этот аргумент добавляется к пока что еще не известному аргументу лямбда функции, которая возвращается после исполнения add(). Кстати, лямбда функция вызывается каждый раз, когда мы вызываем add(). Это позволяет нам использовать различные значения для аргументов.
Python - Скрипт
def add(a):
    return lambda b: a+b

# Присваиваем переменной лямбда функцию ( lambda b: 100+b )
add_to_100 = add(100)

# Через переменную обращаемся к лямбда функции ( lambda b: 100+b )
# Параметр b = 50
print(add_to_100(50))
Python - Результат запуска скрипта
150
Теперь, когда мы имеем представление о том, как можно использовать анонимные функции с обычными функциями «высшего порядка», мы можем разобрать взаимодействие с filter(), map() и reduce().

Использование лямбда функций в filter(), map() и reduce()

1. filter()

Метод filter() используется для фильтрации итерируемых объектов (list, set, dict и проч.) с помощью другого метода, переданного в качестве аргумента, который определит правила фильтрации. Синтаксис выглядит следующим образом:
Синтаксис
filter(метод, итерируемый_объект)

Рекомендуем курсы по Python от наших партнеров


Взглянем на пример использования этого метода вместе с лямбда функцией - избавимся от нечетных элементов списка:
Python - Интерактивный режим
# Создаем список lst
>>> lst = [4, 67, 43, 2, 90, 11, 100, 7, 5]

# Передаем функции filter() 2 параметра
# Первый параметр: лямбда функция, которая возвращает True, если элемент списка четный
# Второй параметр: сам список, который необходимо профильтровать
>>> filtered_lst = list(filter(lambda item: (item % 2 == 0), lst))
>>> filtered_lst
[4, 2, 90, 100]
В данном примере в метод filter() передаются два аргумента: лямбда функция, которая проверяет, является ли элемент четным, и итерируемый объект, который представлен списком.

На выходе результат преобразовывается в список и присваивается новой переменной.

2. map()

Метод map() применяет переданный метод ко всем элементам итерируемого объекта и возвращает список. Синтаксис таков:
Синтаксис
map(метод, итерируемый_объект)
Рассмотрим пример, который демонстрирует работу этого метода - добавим ко всем элементам списка 100:
Python - Интерактивный режим
# Создаем список lst
>>> lst = [4, 67, 43, 2, 90, 11, 100, 7, 5]

# Вызываем функцию map() и передаем ей 2 параметра
# Первый параметр: лямбда функция с одним параметром, к которому она прибавляет 100
# Второй параметр: сам список, каждый элемент которого надо изменить в соответствии со значением лямбда функции
>>> mapped_lst = list(map(lambda item: item + 100, lst))
>>> mapped_lst
[104, 167, 143, 102, 190, 111, 200, 107, 105]

3. reduce()

И, наконец, метод reduce(), который используется для применения метода к какой-либо последовательности элементов, возвращая единое значение. Синтаксис следующий:
Синтаксис
reduce(метод, последовательность)
Рассмотрим пример - последовательно сложим все элементы списка:
Python - Интерактивный режим
# Импортируем метод reduce из стандартного модуля functools
>>> from functools import reduce

# Создаем список lst
>>> lst = [4, 67, 43, 2, 90]

# Вызываем функцию reduce() и передаем ей 2 параметра:
# Первый параметр: лямбда функция, которая складывает два элемента
# Второй параметр: список, элементы которого будут последовательно складываться
>>> reduce(lambda a,b: a+b, lst)
206
Картинка наглядно иллюстрирует работу примера.
Smartiqa Принцип работы функции reduce()
Принцип работы функции reduce()
Результат работы программы демонстрирует последовательное добавление каждого элемента списка к финальному результату.
На этом мы подходим к концу разбора лямбда функций. Надеюсь, что после прочтения этой статьи у вас сложилось четкое понимание об этом замечательном инструменте языка Python.

Используйте анонимные функции там, где того требует случай, и не засоряйте код их бесконечным потоком, тем самым ухудшая читаемость. Практикуйтесь как можно больше и наращивайте свой опыт.
25 ИЮЛЯ / 2020
Как вам материал?

Читайте также