Как создаются анонимные функции python


Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Как создать анонимную функцию Python
Чтобы создать анонимную функцию, т.е. функцию у которой нет имени, в Python применяется ключевое слово lambda . Анонимные функции применяются в качестве дополнительного параметра в некоторых методах. Например, при сортировке списка можно задать расположение элементов в обратном порядке:
lst = [2, 1, 6, 0] lst.sort(key=lambda el: -el) print(lst)
Результат выполнения кода:
Трепачёв Дмитрий © 2012-2023
t.me/trepachev_dmitry
Лямбда-функция в Python простыми словами

В этой статье вы подробнее изучите анонимные функции, так же называемые «лямбда-функции». Давайте разберемся, что это такое, каков их синтаксис и как их использовать ( с примерами).
Лямбда-функции в Python являются анонимными. Это означает, что функция безымянна. Как известно, ключевое слов def используется в Python для определения обычной функции. В свою очередь, ключевое слово lambda используется для определения анонимной функции.

Лямбда-функция имеет следующий синтаксис.
Lambda аргументы: выражение
Лямбда-функции могут иметь любое количество аргументов, но у каждой может быть только одно выражение. Выражение вычисляется и возвращается. Эти функции могут быть использованы везде, где требуется объект-функция.
1.1. Пример лямбда-функции.
Ниже представлен пример лямбда-функции, удваивающей вводимое значение.
double = lambda x: x*2 print(double(5))
Вывод:
В вышеуказанном коде lambda x: x*2 — это лямбда-функция. Здесь x — это аргумент, а x*2 — это выражение, которое вычисляется и возвращается.
Эта функция безымянная. Она возвращает функциональный объект с идентификатором double . Сейчас мы можем считать её обычной функцией.
double = lambda x: x*2
def double(x): return x * 2
- Эта функция может иметь любое количество аргументов, но вычисляет и возвращает только одно значение
- Лямбда-функции применимы везде, где требуются объекты-функции
- Вы должны помнить, что синтаксически лямбда-функция ограничена, позволяет представить всего одно выражение
- Они имеют множество вариантов применения в конкретных областях программирования, наряду с другими типами выражений, используемых в функциях.
2. Различие между обычной функцией и лямбда-функцией
Рассмотрим пример и попробуем понять различие между определением ( Def ) для обычной функции и lambda —функции. Этот код возвращает заданное значение, возведенное в куб:
def defined_cube(y): return y*y*y lambda_cube = lambda y: y*y*y print(defined_cube(2)) print(lambda_cube(2))
Как показано в примере выше, обе представленные функции, defined_cube() и lambda_cube() , ведут себя одинаково, как и предполагалось.
Разберем вышеуказанный пример подробнее:
- Без использования лямбды: Здесь обе функции возвращают заданное значение, возведенное в куб. Но при использовании def , нам пришлось определить функцию с именем и defined_cube() дать ей входную величину. После выполнения нам также понадобилось возвратить результат, из того места, откуда была вызвана функция, и мы сделали это, используя ключевое слово return .
- С применением лямбды: Определение лямбды не включает оператор return , а всегда содержит возвращенное выражение. Мы также можем поместить определение лямбды в любое место, где ожидается функция, и нам не нужно присваивать его переменной. Так выглядят простые лямбда-функции.
3. Лямбда-функции и функции высшего порядка
Мы используем лямбда-функцию, когда нам ненадолго требуется безымянная функция.
В Python мы часто используем их как аргумент функции высшего порядка (функции, которая принимает другие функции в качестве аргументов). Лямбда-функции используют вместе с такими встроенными функциями как filter() , map() , reduce() и др.
Давайте рассмотрим еще несколько распространенных вариантов использования лямбда-функций.
3.1. Пример с filter()
Функция filter() в Python принимает в качестве аргументов функцию и список .
Функция вызывается со всеми элементами в списке, и в результате возвращается новый список, содержащий элементы, для которых функция результирует в True .
Вот пример использования функции filter() для отбора четных чисел из списка.
my_list = [1, 3, 4, 6, 10, 11, 15, 12, 14] new_list = list(filter(lambda x: (x%2 == 0) , my_list)) print(new_list)
Вывод:
[4, 6, 10, 12, 14]
3.2. Пример с map()
Функция map() принимает в качестве аргументов функцию и список.
Функция вызывается со всеми элементами в списке, и в результате возвращается новый список, содержащий элементы, возвращенные данной функцией для каждого исходного элемента.
Ниже пример использования функции map() для удвоения всех элементов списка.
current_list = [1, 3, 4, 6, 10, 11, 15, 12, 14] new_list = list(map(lambda x: x*2 , current_list)) print(new_list)
Вывод:
[2, 6, 8, 12, 20, 22, 30, 24, 28]
3.3. Пример с reduce()
Функция reduce() принимает в качестве аргументов функцию и список. Функция вызывается с помощью лямбда-функции и итерируемого объекта и возвращается новый уменьшенный результат. Так выполняется повторяющаяся операцию над парами итерируемых объектов. Функция reduce() входит в состав модуля functools .
from functools import reduce current_list = [5, 15, 20, 30, 50, 55, 75, 60, 70] summa = reduce((lambda x, y: x + y), current_list) print(summa)
Вывод:
Здесь результаты предыдущих двух элементов суммируются со следующим элементом, и это продолжается до конца списка, вот так:
5+15+20+30+50+55+75+60+70
4. Лямбда и списковое включение
В этом примере мы будем использовать лямбда-функцию со списковым включением и лямбда-функцию с циклом for . Мы выведем на экран таблицу из 10 элементов.
tables = [lambda x = x: x*10 for x in range(1, 11)] for table in tables: print(table())
Вывод:
10 20 30 40 50 60 70 80 90 100
5. Лямбда и условные операторы
Давайте рассмотрим использование условий if-else в лямбда-функции. Как вы знаете, Python позволяет нам использовать однострочные условия, и именно их мы можем помещать в лямбда-функцию для обработки возвращаемого результата.
Например, есть две цифры, и вы должны определить, какая из них представляет наибольшее число.
max_number = lambda a, b: a if a > b else b print(max_number(3, 5))
Вывод:
Этот метод позволяет вам добавлять условия в лямбда-функции.
6. Лямбда и множественные операторы
Лямбда-функции не допускают использования нескольких операторов, однако мы можем создать две лямбда-функции, а затем вызвать вторую лямбда-функцию в качестве параметра для первой функции. Давайте попробуем найти второй по величине элемент, используя лямбду.
current_list = [[10,6,9],[0, 14, 16, 80],[8, 12, 30, 44]] sorted_list = lambda x: (sorted(i) for i in x) second_largest = lambda x, func: [y[len(y)-2] for y in func(x)] result = second_largest(current_list, sorted_list) print(result)
Вывод:
[9, 16, 30]
В предыдущем примере, мы создали лямбда-функцию, которая сортирует каждый вложенный список в заданном списке. Затем этот список проходит как параметр для второй лямбда-функции, которая возвращает элемент n-2 из отсортированного списка, где n — длина вложенного списка.

Заключение
Теперь вы знаете как использовать в Python lambda -функции и можете:
- Писать и использовать лямбда-функции.
- Рационально выбирать между обычными и лямбда-функциями в Python.
- Использовать лямбды с функциями высшего порядка или ключевыми функциями.
- Использовать лямбды с абстракциями списков.
- Добавлять условия к лямбда-функциям.
- python
- лямбда-выражения
- списки
- математические операции
Анонимная функция (лямбда-выражение)#
В Python лямбда-выражение позволяет создавать анонимные функции — функции, которые не привязаны к имени.
В анонимной функции:
- может содержаться только одно выражение
- могут передаваться сколько угодно аргументов
In [1]: def sum_arg(a, b): return a + b In [2]: sum_arg(1, 2) Out[2]: 3
Аналогичная анонимная функция, или лямбда-функция:
In [3]: sum_arg = lambda a, b: a + b In [4]: sum_arg(1, 2) Out[4]: 3
Обратите внимание, что в определении лямбда-функции нет оператора return, так как в этой функции может быть только одно выражение, которое всегда возвращает значение и завершает работу функции.
Лямбда-функцию удобно использовать в выражениях, где требуется написать небольшую функцию для обработки данных.
Например, в функции sorted лямбда-выражение можно использовать для указания ключа для сортировки:
In [5]: list_of_tuples = [('IT_VLAN', 320), . : ('Mngmt_VLAN', 99), . : ('User_VLAN', 1010), . : ('DB_VLAN', 11)] In [6]: sorted(list_of_tuples, key=lambda x: x[1]) Out[6]: [('DB_VLAN', 11), ('Mngmt_VLAN', 99), ('IT_VLAN', 320), ('User_VLAN', 1010)]
Также лямбда-функция пригодится в функциях map и filter, которые будут рассматриваться в следующих разделах.
