Лямбда-функции в Python могут больше, чем вы думаете
Когда вы только начинаете изучать язык или только познакомились с лямбда фукциями, вероятнее всего они вам показались головоломкой, с малым спектром применения в реальных проектах.
И отчасти, я думаю, вы согласитесь с утверждением, что использование обычной функции в данном случае будет проще всего. Такого же подхода я придерживался длительное время. Со временем я узнал о реальных возможностях лямбда-функций. Разберемся более подробно в данной теме.
Итак, прежде всего, что такое лямбда-функция? Эта функция - быстрый способ создания однострочной функции. Нам не нужно давать ей никакого названия. Это просто, быстро и готово к использованию.
Мы разбирали уже лямбда функции в другой статье, рекомендую ознакомиться.
Основной синтаксис лямбда-функции:
lambda arguments: expression
Например, чтобы сложить 2 числа, мы можем написать так:
add = lambda x, y: x + y
print(add(5, 3)) # Вывод: 8
Как мы видим, нет необходимости использовать def или какие-либо дополнительные строки. Мы только что написали однострочную функцию
Почему мы не можем использовать обычную функцию?
Это может быть хорошим вопросом для любого новичка. Просто помните, что когда мы хотим создать функции, которые сложны с точки зрения их логики или требуют повторного использования, в таком случае обычные функции являются отличным выбором.
Но для небольших задач лямбда-функции могут быть отличным выбором. Наиболее полезны если мы работаем с map, filter или sort.
Давайте разберемся в этом на нескольких примерах:
1. Сортировка будет проще
Предположим, у нас есть список имен с указанием их возраста. Теперь мы просто хотим отсортировать список по возрасту. Для этого мы можем использовать лямбда-функцию:
people = [
('Игорь', 25),
('Маша', 30),
('Петр', 20)
]
# Сортировка по возрасту
sorted_people = sorted(people, key=lambda person: person[1])
print(sorted_people)
# Вывод: [('Петр', 20), ('Игорь', 25), ('Маша', 30)]
Без лямбда-функций нам пришлось бы написать для этого отдельную функцию.
2. Для фильтрации данных
Например, если у нас есть список чисел, и мы хотим, чтобы в нем были только четные числа. Тогда вместо написания другой полной функции мы можем просто использовать lambda с функцией filter:
num = [1, 2, 3, 4, 5, 6]
# Мы хотим оставить только четные числа
evens = list(filter(lambda x: x % 2 == 0, num))
print(evens)
# Вывод: [2, 4, 6]
3. Преобразование данных
Если мы хотим удвоить каждое число в списке, то мы можем использовать lambda с функцией map.
num = [1, 2, 3, 4]
# Мы должны удвоить каждое число
doubled = list(map(lambda x: x * 2, num))
print(doubled)
# Вывод: [2, 4, 6, 8]
4. Сочетание функций
Мы можем использовать лямбда-функцию с функцией уменьшения, чтобы объединить все элементы в списке.
Например, если мы хотим добавить все числа в список, то:
from functools import reduce
num = [1, 2, 3, 4]
# Для сложение всех чисел
total = reduce(lambda x, y: x + y, num)
print(total)
# Вывод: 10
Когда мы не должны использовать лямбда-функцию?
Если мы говорим, что лямбда-функции идеальны для любой ситуации, то мы абсолютно неправы. Они идеально подходят для быстрых и небольших задач, но не для функций со сложной логикой.
Затем мы должны использовать обычную функцию, определенную с помощью def. Не используйте лямбда-функцию, если она затрудняет чтение вашего кода.
Например, таким образом:
complex_lambda = lambda x: (x ** 2 if x % 2 == 0 else x ** 3)
Описанная выше функция работает. Но это затрудняет чтение кода. Поэтому избегайте подобных ситуаций.
Иногда я временами использую лямбда-функции для сложных задач, но это не самый лучший подход. В любом случае, временами использовать данный инструмент время от времени стоит, так как в мире где нет единого способа для реализации задач, мы можем встретить код другого разработчика в котором можно наткнуться на не самые лучшие практики. В добавок если мы избегаем по тем или иным причинам использования таких конструкций, мы рискуем потратить много времени на ревью, а порой и вовсе не понять что имел ввиду программист.
Comments
In order to leave your opinion, you need to register on the website