Используйте Lambda как профессионал!

У лямбда-функции определенно много вариантов использования. Вот подборка наиболее важных мест, где можно использовать лямбда-функции (с примерами кода). Вы можете сохранить эту статью для дальнейшего использования!

Прежде чем мы перейдем к примерам использования лямбда-функций, если вы хотите узнать, что такое лямбда-функции, вот вам статья.

Теперь пришло время перейти к вариантам использования лямбда! Я добавляю 7 вариантов использования на данный момент. Я обновлю это, если получу другие варианты использования лямбда-функции.

Метод сортировки

Метод sort(), используемый со списками, использует лямбда-функцию для определения настраиваемого механизма сортировки его элементов.

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

Вот пример.

li = [23, 56, 89, 32, 12]
li.sort(key=lambda x: str(x)[1])
print(li)

Без ключевого аргумента [12, 23, 32, 56, 89] будет конечным результатом. Но посмотрите на вывод программы, написанной выше.

Вывод:

[32, 12, 23, 56, 89]

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

Максимальная функция

Встроенная функция max() используется для поиска максимального значения из набора значений.

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

Например, посмотрите на этот код.

li = [1, 0, -1, 2, -3]
print(max(li, key=lambda x: abs(x)))

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

Таким образом, вывод этого кода будет -3.

-3

Вот как мы используем лямбда внутри функции max().

Минимальная функция

Подобно функции max(), встроенная функция min() также использует аргумент key вместе с лямбда-функцией для настройки способа выбора минимального значения из набора значений.

В этом примере позвольте мне внести небольшое изменение, попросив лямбда-функцию возвращать каждое значение с отрицательным знаком.

li = [1, 2, 3, 4, 5]
print(min(li, key=lambda x: -x))

Здесь я изменил каждое значение на отрицательное. Обычно минимальное значение было бы 1, но теперь оно равно 5, потому что -5 будет минимальным среди отрицательных значений.

Вывод:

5

Функция min() использует ту же концепцию, что и max(), но для выбора минимального значения.

Класс фильтра

Класс filter() используется для фильтрации значений из набора значений на основе заданной функции. Он возвращает объект фильтра, который необходимо преобразовать в нужный тип данных перед печатью значений.

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

Все элементы, которые возвращают True для заданной функции, будут сохранены. Все, что возвращает False, не учитывается. Вот простой пример.

li = ['bat', 'tip', 'cat', 'pet']
fr = filter(lambda x: x[1] == 'a', li)
print(list(fr))

Здесь я проверил, имеет ли второй символ каждого значения ‘a’. Любой элемент, не удовлетворяющий этому условию, отбраковывается.

Таким образом, в качестве отфильтрованных значений на выходе будут только bat и cat.

['bat', 'cat']

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

Класс карты

Класс map() используется для применения функции к каждому элементу в наборе значений.

Примеры включают преобразование строк верхнего регистра в нижний регистр и строковых значений в целые числа. Есть и другие полезные приложения. Он возвращает объект карты, который затем можно преобразовать в любой желаемый тип данных коллекции.

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

Вот код.

li = [4, 8, 3, 2, 9]
mp = map(lambda x: x ** 3, li)
print(list(mp))

Выход:

[64, 512, 27, 8, 729]

Вы можете применить любую общую логику одного выражения к каждому элементу, используя класс map() и функцию лямбда.

Функция уменьшения

Функция reduce(), часть модуля functools, используется для создания конечного одиночного значения из набора значений. Окончательное значение определяется с помощью функции, переданной внутри функции reduce().

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

from functools import reduce

li = [5, 7, 3, 4, 6]
re = reduce(lambda x, y: x * y, li)
print(re)

В функции reduce() вы всегда используете два параметра. Один для первого значения, другой для второго. Здесь 5 и 7 перемножаются. Теперь результат 35 снова передается параметру x, а третье значение 3 передается параметру y.

Так происходит до тех пор, пока в списке не останется элементов, а конечный результат сохраняется в переменной re.

Выход:

2520

Вот как мы используем лямбды с функцией reduce().

Сортированная функция

Встроенная функция sorted() похожа на метод sort(), но она является общей для всех типов коллекций, а не только для списков. Они используются для сортировки набора значений.

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

Вот пример, в котором числа в списке сортируются на основе обращения каждого числа.

li = [59, 38, 81, 66, 43]
so = sorted(li, key=lambda x: str(x)[::-1])
print(so)

Выход будет,

[81, 43, 66, 38, 59]

Вот как функция sorted() используется вместе с лямбдами для сортировки значений на основе пользовательского условия.

Заключение

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

Надеюсь, вы узнали что-то полезное из этой статьи! Если вы считаете, что эта статья полезна, не забудьте хлопать, чтобы показать, что она была полезна. Не стесняйтесь комментировать свои сомнения и вопросы!

Вы можете получить мои бесплатные рукописные заметки Python! Если хотите, поддержите меня, купив версию Magic Scan за $2+ или $8+.

Следуйте за мной, чтобы узнать больше о Python, подобных этому!

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



Спасибо за прочтение! Удачного кодирования :)

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .