Канал Old Programmer приветствует вас. Сегодня разбираем интересный вопрос - lambda функции.
lambda-функция
Лямбда - функции это так называемые безымянные функции. Пишутся они по определенным правилам в одну строку. Используются в основном при передаче в качестве параметров, а также в таких функциях как map(), filter(), sorted().
Рассмотрим несколько примеров простейших лямбда-функций.
lm1 = lambda x: x**3
Задает функцию возведения в куб. Функция с одним входным параметром.
print(lm1(3))
Получим
27
Лямбда-функция может иметь несколько входных параметров.
lm2 = lambda x, y, z: x + y - z
print(lm2(3, 3, 7))
Результат выполнения
-1
Функция может и не иметь параметров
lm3 = lambda : 10 > 2
print(lm3())
Результат выполнения
True
Но обратимся к обычным функциям и посмотрим, как они могут передаваться в качестве параметров (см. lmbd1.py).
В программе lmbd1.py функция f1() используется в качестве одного из передаваемых параметров в функцию f2(). Как видим функция передается как обычная переменная или точнее объект. Результат выполнения программы
[1, 4, 9, 16, 25]
Теперь попробуем переписать программу lmbd1.py, но используя вместо обычной функции лямбда-функцию.
Как видим в программе lmbd2.py лямбда функция может быть сформулирована непосредственно при вызове функции, где лямбда-функция является параметром.
Результат выполнения программы
[1, 8, 27, 64, 125]
Теперь рассмотрим примеры использования лямбда-функций в специальных функциях Python. Их еще называют функциями высшего порядка.
Функция map() получает список и воздействует на каждый полученный элемент указанной функцией. Например ls = list(map(int, input().split())) - получаем список целых чисел, вводимых в строке через пробел. Но в качестве такой функции, преобразующей каждый элемент списка, можно использовать и лямбда-функцию (см. lmbd3.py).
Например вводится строка
qwe asdf d ff as da asss a s as
Получаем
[('qwe', 3), ('asdf', 4), ('d', 1), ('ff', 2), ('as', 2), ('da', 2), ('asss', 4), ('a', 1), ('s', 1), ('as', 2)]
т.е. список кортежей: (строка, длина строки).
Функция filter() принимает на входе некоторый список и фильтрует его. Другими словами отбирает только удовлетворяющие условию элементы.
В программе lmbd4.py в результате преобразования из исходного списка проходят только четные элементы.
Результат выполнения программы
[4, 6, 2, 56, 34]
Программа lmbd5.py показывает решение одной интересной задачи. Дан список слов, отделенный друг от друга пробелами, необходимо отсортировать слова по их длинам.
На входе дана строка
eqwe wqe qe eee eeeeeeeeeqweq eew qq qq d f ss a q gg d
Результат
a d d f q gg qe qq qq ss eee eew wqe eqwe eeeeeeeeeqweq
Заметим, сортировка производится так, что если строки имеют одинаковые длины, то тогда, строки выстраиваются в лексикографическом порядке.
Но если нам нужно выстроить порядок по другому закону, то можно использовать ключ сортировки и это ключ также может быть лямбда-функцией. Например
Заменим в программе lmbd5.py ll.sort() на ll.sort(key=lambda x: x[0]) и получим
d f a q d qe qq qq ss gg wqe eee eew eqwe eeeeeeeeeqweq
Т.е. строки отформатированы по длинам, но не учитывается порядок внутри групп с одинаковой длиной.
На этом пока все о лямбда-функциях.
См. также
До скорого на моем канале Old Programmer. Подписываемся, ставим лайки, пишем комментарии.
#программирование #программисты #python #языки программирования