Анонимная функция (lambda-функция) в Python
Что нужно знать начинающему веб-разработчику о лямбда-выражениях и анонимных функциях? Скорее всего, если вы заинтересовались этой темой, вы уже знаете что значит и первое, и второе. Но для ясности мы дадим краткое определение терминам.
Анонимные функции — это функции, которым не присваивается идентификатор и которые объявляются в месте использования. Они применимы во многих языках программирования. Однако их синтаксис от языка к языку заметно разнится. Лямбда-выражение — это элемент синтаксиса, который нужен для определения анонимной функции.
Освойте профессию «Fullstack-разработчик на Python»
Итак, мы проанализировали несколько статей на тему анонимных функций и лямбда-выражений и представим здесь их краткий адаптированный перевод или ссылки, чтобы вы сами могли выбрать те темы, которые вам интересны. За основу мы взяли статью пишущего программиста Ankit Patel, поехали!
Анонимные функции состоят из аргументов, которые передаются функциям высшего порядка или используются для обработки результатов функции высшего порядка, которой необходимо вернуть функцию.
Такие функции являются частью функционального программирования, где функция обладает теми же ролями, что и литералы для других типов данных.
Анонимные функции используются тогда, когда функциональность, которая в них содержится, не нуждается в названии и может ограничиться использованием краткого термина. Чаще всего они применяются при замыкании и карринге.
Функции, которые могут вычисляться в среде, содержащей связанные переменные.
Лямбда-выражение, связанное с переменной
*Название в честь Карри Хаскела, разработчика комбинаторной логики, в которой сведение к функциям одного аргумента носит основополагающий характер, источник — Wikipedia.
Для получения определенного результата функция, которая претерпевает процесс изменения, в результате которого она принимает меньшее количество входных данных, называется каррируемой.
- Чтобы определить анонимную функцию в Python, мы используем ключевое слово лямбда, чтобы создать функцию, которая может вычислить значение выражения и автоматически вернуть скалярную величину.
- Синтаксис:
- lamdba arg1,arg2, …argN:
В коде выше после передачи позиционных аргументов в функцию, мы подробно передаем другой аргумент для лямбда-аргумента, чтобы его вычислить.
- Используя функцию map, мы можем перебрать весь список и выполнить действия с отдельным его элементом, передавая необходимые данные.
- Синтаксис:
- map (function,inputs)
Здесь мы используем лямбда-выражение как аргумент функции map, что после этого детально конвертируется в список.
Сходным образом мы можем использовать функцию filter, которая выводит данные на основе определенного условия.
Более подробно почитать об этих функциях можно в статье Full Stack- разработчика, Rupesh Mishra. Он рассказывает как их использовать, описывая базовый синтаксис и снабжая все это примерами.
- Когда вам нужно вычислить результат с помощью какого-либо выражения.
- Когда вы не хотите совершать ненужные вызовы функций.
Не злоупотребляйте лямбда-функциями, используя их без надобности. Если вы хотите определить функцию, которая выполняет конкретную задачу и является важной, то она заслуживает имени. К тому же, так вы сделаете код более читаемым. Анонимные функции зачастую сложно интерпретировать, и у них сложный синтаксис.
Они не поддерживают строку документации, и поэтому задокументировать их функциональность крайне сложно.
Добавим, что, безусловно, работа веб-разработчика предполагает использование лямбда-выражений, но только по-настоящему хорошие веб-разработчики умеют не использовать эти инструменты там, где это не нужно. Об этом читайте в статье Monty Python. Он подробно описывает преимущества и недостатки лямбда-выражений и приводит примеры их неудачного использования.
Ну а в начале мы писали, что разные языки по-разному используют анонимные функции. Так вот в статье Андрея Мискова об их применении в JS вы найдете подробное описание спорных моментов их использования, а также конкретные примеры для сравнения с другими языками, в том числе, Python.
Удачного вам погружения в мир разработки и Python!
Лямбда функции Python
- Лямбда-функция Python или анонимная функция Python не имеет имени.
- Мы можем определить анонимную функцию, используя зарезервированное ключевое слово лямбда.
- Область анонимной функции ограничена текущей областью, в которой она определена.
- Лямбда-функция может иметь один или несколько аргументов, но может иметь только одно выражение.
- Выражение оценивается, и результат возвращается из лямбда-функции.
- Обычно используются с операциями map(), filter() и reduce().
Синтаксис лямбда-функции:
lambda arguments : expression
Пример анонимной функции
Допустим, у нас есть функция для получения площади прямоугольника.
def area_of_rectangle(l, w):
return l * w
print(f'Area of Rectangle (4, 5) is {area_of_rectangle(4, 5)}')
Давайте создадим анонимную функцию, используя ключевое слово lambda, чтобы получить площадь прямоугольника.
rectangle_area = lambda x, y: x * y
print(f'Area of Rectangle (4, 5) is {rectangle_area(4, 5)}')
Когда использовать?
- Для небольших тривиальных задач с небольшой сложностью.
- Когда функция имеет только одно выражение.
- Для повторяющихся задач, носящих временный характер.
- Если вы хотите, чтобы область действия функции была ограничена только текущей областью.
- Это полезно, когда аргументом функции является другая функция, такая как функции map(), filter() и reduce().
Лямбда-функция с map()
Функция map() принимает в качестве аргументов функцию и итерацию. Функция применяется к каждому элементу в итерируемом объекте, и возвращается обновленный итеративный объект.
Допустим, у нас есть список целых чисел. Мы должны создать новый список, умножив каждый элемент на 10. Мы можем использовать здесь лямбда-функцию вместо того, чтобы создавать функцию для этого единственного варианта использования.
list_numbers = [1, 2, 3, 4]
list_numbers = map(lambda x: x * 10, list_numbers)
for num in list_numbers:
print(num, end=» «)
Вывод:
С filter()
Встроенная функция filter() принимает в качестве аргумента функцию и итерацию. Функция применяется к каждому элементу итерации. Если функция возвращает True, элемент добавляется к возвращаемой итерации.
Допустим, у нас есть список целых чисел, и мы хотим удалить все нечетные числа. В окончательном списке должны быть только целые числа.
list_numbers = [1, 2, 3, 4, 5, 6]
list_numbers = filter(lambda x: x % 2 == 0, list_numbers)
for num in list_numbers:
print(num, end=» «)
С reduce()
Функция reduce() присутствует в модуле functools. Эта функция принимает в качестве аргумента функцию и последовательность. Функция должна принимать два аргумента. Элементы из последовательности передаются в функцию вместе с накопленным значением. Конечный результат — одно значение.
Допустим, у нас есть список целых чисел, и мы хотим получить сумму всех его элементов.
from functools import reduce
list_ints = [1, 2, 3, 4, 5, 6]
total = reduce(lambda x, y: x + y, list_ints)
print(f'Sum of list_ints elements is {total}')
Лямбда-функция Python без аргументов
Да, мы можем определить лямбда-функцию без аргументов. Но бесполезно, потому что оперировать будет не на чем. Давайте посмотрим на простой пример.
get_5 = lambda: 5
print(get_5()) # 5
Поскольку лямбда-функция всегда возвращает одно и то же значение, мы можем просто присвоить ей переменную. Использование без аргументов — явное злоупотребление этой функцией.
Лямбда-функция в Python простыми словами
ph_piter
В этой статье вы подробнее изучите анонимные функции, так же называемые «лямбда-функции». Давайте разберемся, что это такое, каков их синтаксис и как их использовать ( с примерами).
Лямбда-функции в Python являются анонимными. Это означает, что функция безымянна. Как известно, ключевое слов def используется в Python для определения обычной функции. В свою очередь, ключевое слово lambda используется для определения анонимной функции.
Лямбда-функция имеет следующий синтаксис
Lambda аргументы: выражение
Лямбда-функции могут иметь любое количество аргументов, но у каждой может быть только одно выражение. Выражение вычисляется и возвращается. Эти функции могут быть использованы везде, где требуется объект-функция.
1.1. Пример лямбда-функции
Ниже представлен пример лямбда-функции, удваивающей вводимое значение.
double = lambda x: x*2
print(double(5))
Вывод:
10
В вышеуказанном коде 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))
Вывод:
8
8
Как показано в примере выше, обе представленные функции, 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)
Вывод:
380
Здесь результаты предыдущих двух элементов суммируются со следующим элементом, и это продолжается до конца списка, вот так:
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))
Вывод:
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 и его лямбда-expressions
Python – популярный и достаточно простой язык программирования. Он используется для создания скриптов, программных приложений, игр. Обладает простым и понятным синтаксисом.
Для работы с Python создаются различные фреймворки, инструменты и библиотеки. У языка поддерживаются разнообразные встроенные возможности. Пример – lambda function. Далее предстоит познакомиться с соответствующим типом функций получше.
Дополнительно предлагается ключевая терминология для каждого разработчика. Вся информация, указанная ниже, ориентирована на тех, кто уже имеет поверхностные знания программирования на Python.
Она также подойдет новичкам и опытным специалистам в сфере разработки программного обеспечения.
Термины и определения
В Питоне и других языках разработки используются некоторые «стандартные» определения. С их помощью удается быстрее разобраться в принципах программирования, а также в том, что будет делать тот или иной код:
- Алгоритм – совокупность действий, инструкций или правил, направленная на решение той или иной задачи.
- Аргумент – значение, которое будет передаваться в функцию (lambda x и другие), а также в различные команды.
- Символ – простейшая единица отображения информации в программном коде. Равна одной символьной или буквенной записи.
- Объект – комбинация констант, переменных и иных структурных единиц, которые могут выбирать и обрабатываться вместе.
- Класс – набор связанных объектов с общими свойствами.
- Константа – значение, которое не изменяется. Оно остается одинаковым в процессе всего жизненного цикла приложения.
- Тип данных – классификация информации определенного типа.
- Массив – список или множество схожих типов данных, которые предварительно были сгруппированы.
- Цикл – последовательность инструкций и функций, которая повторяется снова и снова до тех пор, пока система не достигнет поставленного условия или не получит команду на останов.
- Итерация – один проход через набор операций или инструкций в программном коде.
- Ключевое слово – слово, которое зарегистрировано синтаксисом выбранного языка программирования. Используется для описания функций, инструментов и команд.
- Операнд – объект, которым можно манипулировать через операторы.
- Оператор – объект, управляющий операндами.
- Переменная – место хранения информации из приложения, которое было предварительно названо тем или иным именем. Именованная ячейка в памяти, выделенная системой для взаимодействия с различными материалами.
- Указатель – переменная, которая включает в себя адрес места в памяти.
- Синтаксис – правила о том, как правильно использовать и передавать операторы.
Все это – «база», без которой разобраться в полной мере в том, что собой представляет lambda x в Питоне, не получится.
Несколько слов о функциях
Функция (the func) в Питоне – это объект, который принимает аргументы, а затем возвращает то или иное значение. Обычно этот компонент программного кода определяется за счет инструкции (ключевого слова) the def.
В процессе работы с функциями можно столкнуться с инструкцией return (lambda и не только). Она указывает на то, что именно требуется вернуть в виде результирующего значения. Вот – простой пример функции (the func) и возврата результатов ее расчетов:
Python. Лямбда-выражения. Анонимные функции. Ключевое слово lambda
Содержание
Поиск на других ресурсах:
1. Анонимные функции. Понятия. Ключевое слово lambda. Общая форма
Язык Python позволяет задавать объекты функции в виде выражений. В этом случае ключевое слово def заменяется ключевым словом lambda.
Различие между использованием def и lambda заключается в том, что в случае с def выражение связывает имя с функцией, а в случае использования lambda выражение возвращает функцию.
Общая форма объявления lambda-выражения следующая:
lambda agrument1, agrument2, …, argumentN: expression
здесь
- argument1, argument2, argumentN — имена аргументов, которые использует lambda-выражение;
- expression — непосредственно лямбда-выражение.
Проанализировав общую форму лямбда-выражения, можно прийти к следующим выводам:
- лямбда-выражения записываются в одной строке. Если попытаться поместить выражение expression в другую строку, то компилятор выдаст ошибку;
- лямбда-выражения создают функции, которые не имеют имени. Такие функции называются анонимными функциями.
⇑
2. Случаи использования лямбда-выражений
После того, как лямбда-выражение объявлено, оно может быть использовано в следующих случаях:
- как функция. Это случай, когда лямбда-выражение присваивается некоторому имени. Затем с этим именем происходит вызов лямбда-выражения;
- как элемент (литерал) кортежа или списка;
- как элемент (литерал) словаря, который по требованию выполняет некоторое действие. В этом случае формируется так называемая таблица переходов.
⇑
3. Отличия между объявлением и использованием лямбда-выражений (lambda) и функций (def)
Между объявлением и использованием лямбда-выражений и функций существуют следующие различия:
- лямбда-выражение объявляется с помощью ключевого слова lambda. Функция объявляется с помощью ключевого слова def;
- лямбда-выражения — это выражения, def — это инструкции. Это означает, что лямбда-выражение может быть использовано там, где не допускается использование def: внутри литералов или вызовах функций;
- лямбда-выражение содержит только одно выражение, которое возвращается. Результат вычисления выражения является результатом лямбда-выражения. Для возвращения результата из лямбда-выражения не нужно использовать инструкцию return;
- в отличие от объявления функций (def) лямбда-выражения предназначены для вычисления более простых фрагментов кода по сравнению с функциями;
- программный код лямбда-выражения формируется в виде одной строки. Программный код функции может содержать большое количество строк.
⇑
4. Преимущества использования лямбда-выражений
Использование лямбда-выражений дает следующие преимущества:
- лямбда-выражения удобны для создания функций, имеющих небольшие размеры;
- лямбда-выражения упрощают программный код, в который нужно встраивать небольшие фрагменты;
- программный код может удобно использовать лямбда-выражение вместо определения функций там где нужно;
- лямбда-выражения обеспечивают так называемую близость кода. Анонимные инструкции размещаются рядом в программе, что повышает ее читабельность и восприятие и не требует использования дополнительных имен (как в случае с функциями). Уменьшение количества имен в программе снижает возможные конфликты этих имен с другими именами в файле модуля.
⇑
5. Примеры, демонстрирующие самые простые лямбда-выражения. Различия между инструкциями def и lambda. Вызов лямбда-выражений как имен
В нижеследующих примерах продемонстрировано:
- объявление лямбда-выражения и его присвоение некоторому имени;
- вызов (использование) лямбда-выражения по имени;
- различия между объявлением и использованием функций (def) и лямбда-выражений (lambda).
Пример 1. Вычисление произведения трех чисел.
# Лямбда-выражения и функции # Вычисление произведения чисел. # Лямбда-выражение, которое возвращает произведение трех чисел multL = lambda a, b, c: a * b * c # лямбда-выражение в одной строке resLambda = multL(2,5,5) # вызов лямбда-выражения # Функция, возвращающая произведение трех чисел def multF(a, b, c): return a*b*c resFunc = multF(2,5,5) # вызов функции # Вывод результата print(«resLambda = «, resLambda) print(«resFunc = «, resFunc)
Результат выполнения программы
resLambda = 50
resFunc = 50
В вышеприведенном примере результат лямбда-выражения присваивается имени multL
multL = lambda a, b, c: a * b * c
Затем вызов лямбда-выражения с конкретными значениями (a = 2, b = 5, c = 5) присваивается имя (объекта) resLambda
resLambda = multL(2,5,5) # вызов лямбда-выражения
В результате, в объекте resLambda содержится произведение чисел 2*5*5 = 50.
Пример 2. Лямбда-выражение, которое возвращает модуль комплексного числа.
# Лямбда-выражения и функции import math # 1. Лямбда-выражение, которое определяет модуль комплексного числа absL = lambda a, b: math.sqrt(a*a + b*b) # объявление resLambda = absL(3, 4) # вызов # 2. Функция возвращающая модуль комплексного числа # Объявление функции def absF(a, b): return math.sqrt(a*a + b*b) resFunc = absF(3,4) # вызов функции # Вивід результату print(«resLambda = «, resLambda) print(«resFunc = «, resFunc)
Результат выполнения программы
resLambda = 5.0
resFunc = 5.0
Пример 3. Лямбда-выражение, которое определяет дискриминант квадратного уравнения по коэффициентам a, b, c.
# Лямбда-выражения и функции # 1. Лямбда-выражение, которое вычисляет дискриминант на основе коэффициентов a, b, c discrL = lambda a, b, c: b*b — 4*a*c print(«discrLambda = «, discrL(3,4,5)) # 2. Функция, которая возвращает дискриминант на основе коэффициентов a, b, c # Объявление функции def discrF(a, b, c): return b*b-4*a*c print(«discrFunc = «, discrF(3,4,5))
Результат выполнения программы
discrLambda = -44
discrFunc = -44
⇑
6. Примеры использования лямбда-выражений как литералов списков
Пример 1. Использование лямбда-выражения как литерала списка.
На основе лямбда-выражений сформировать список случайных чисел от 0 до 1.
# Лямбда-выражения как литералы списков import random # Словарь, в котором формируются три случайные числа # с помощью лямбда-выражения L = [ lambda : random.random(), lambda : random.random(), lambda : random.random() ] # Вывести результат for l in L: print(l())
Результат выполнения программы
0.5129490134837236
0.8638007610222296
0.915211196027481
Пример 2. Формируется кортеж, в котором элементы умножаются на разные числа. Продемонстрировано использование кортежа для строки.
# Лямбда-выражения как литералы кортежей import random # Кортеж, в котором формируются три литерала-строки # с помощью лямбда-выражения T = ( lambda x: x*2, lambda x: x*3, lambda x: x*4 ) # Вывести результат для строки 'abc' for t in T: print(t('abc'))
Результат выполнения программы
abcabc
abcabcabc
abcabcabcabc
⇑
7. Примеры использования лямбда-выражений для формирования таблиц переходов в словарях
Пример 1. Использование лямбда-выражения для формирования таблиц переходов.
Сформировать таблицу переходов (словарь), в которой по номеру дня недели выводится его название. Продемонстрировать работу созданной таблицы.
# Лямбда-выражения и таблицы переходов # Словарь, который есть таблицей переходов Dict = { 1 : (lambda: print('Monday')), 2 : (lambda: print('Tuesday')), 3 : (lambda: print('Wednesday')), 4 : (lambda: print('Thursday')), 5 : (lambda: print('Friday')), 6 : (lambda: print('Saturday')), 7 : (lambda: print('Sunday')) } # Вызвать лямбда-выражение, выводящее название вторника Dict[2]() # Tuesday
Пример 2. Формируется таблица переходов (словарь) Area, в которой вычисляется площадь известных фигур.
# Лямбда-выражения и таблицы переходов import math # Словарь, представляющий собой таблицу переходов, в которой под названием # фигуры выводится ее площадь Area = { 'Circle' : (lambda r: math.pi*r*r), # окружность 'Rectangle' : (lambda a, b: a*b), # прямоугольник 'Trapezoid' : (lambda a, b, h: (a+b)*h/2.0) # трапеция } # Вызвать лямбда-выражение, которое выводит площадь окружности радиуса 2 print('Area of circle = ', Area['Circle'](2)) # Вывести площадь прямоугольника размером 10*13 print('Area of rectangle = ', Area['Rectangle'](10, 13)) # Вывести площадь трапеции для a=7, b=5, h=3 areaTrap = Area['Trapezoid'](7, 5, 3) print('Area of trapezoid = ', areaTrap)
Результат выполнения программы
Area of circle = 12.566370614359172
Area of rectangle = 130
Area of trapezoid = 18.0
⇑
8. Можно ли в лямбда-выражениях использовать стандартные операторы управления if, for, while?
Ответ: нет.
Согласно синтаксису лямбда-выражение размещается в одной строке. Если попытаться разместить в одной строке оператор while в теле лямбда-выражения, то интерпретатор Python выдаст ошибку «Invalid syntax» как показано ниже
# Здесь выдает ошибку: «Invalid syntax» lmbd = lambda n: while n>0: n=n-1 print(«lmbd = «, lmbd)
То же касается и других управляющих конструкций.
⇑
Связанные темы
⇑
Python Lambda Functions
Python Lambda Functions are anonymous function means that the function is without a name. As we already know that the def keyword is used to define a normal function in Python. Similarly, the lambda keyword is used to define an anonymous function in Python.
Python Lambda Function Syntax
Syntax: lambda arguments : expression
- This function can have any number of arguments but only one expression, which is evaluated and returned.
- One is free to use lambda functions wherever function objects are required.
- You need to keep in your knowledge that lambda functions are syntactically restricted to a single expression.
- It has various uses in particular fields of programming, besides other types of expressions in functions.
Python Lambda Function Example
In the example, we defined a lambda function(upper) to convert a string to its upper case using upper().
|
Output:
GEEKSFORGEEKS
Let’s see some of the practical uses of the Python lambda function.
Condition Checking Using Python lambda function
Here, the format_numric calls the lambda function, and the num is passed as a parameter to perform operations.
|
Output:
Int formatting: 1.000000e+06
float formatting: 999,999.79
|
Output:
Using function defined with `def` keyword, cube: 125
Using lambda function, cube: 125
As we can see in the above example, both the cube() function and lambda_cube() function behave the same and as intended. Let’s analyze the above example a bit more:
Supports single-line sometimes statements that return some value. | Supports any number of lines inside a function block |
Good for performing short operations/data manipulations. | Good for any cases that require multiple lines of code. |
Using the lambda function can sometime reduce the readability of code. | We can use comments and function descriptions for easy readability. |
Practical Uses of Python lambda function
Python Lambda Function with List Comprehension
On each iteration inside the list comprehension, we are creating a new lambda function with a default argument of x (where x is the current item in the iteration).
Later, inside the for loop, we are calling the same function object having the default argument using item() and get the desired value.
Thus, is_even_list stores the list of lambda function objects.
|
Output:
10
20
30
40
Python Lambda Function with if-else
Here we are using the Max lambda function to find the maximum of two integers.
Max = lambda a, b : a if(a > b) else b print(Max(1, 2)) |
Output:
2
Lambda functions do not allow multiple statements, however, we can create two lambda functions and then call the other lambda function as a parameter to the first function. Let’s try to find the second maximum element using lambda.
|
Output:
[3, 16, 9]
Explanation: In the above example, we have created a lambda function that sorts each sublist of the given list. Then this list is passed as the parameter to the second lambda function, which returns the n-2 element from the sorted list, where n is the length of the sublist.
Лямбда-функции в Python
В Python мы используем ключевое слово lambda для объявления анонимной функции, поэтому мы называем их «лямбда-функциями». Анонимная функция относится к функции, объявленной без имени. Хотя синтаксически они выглядят по-разному, лямбда-функции ведут себя так же, как обычные функции, объявленные с использованием ключевого слова def. Ниже приведены характеристики лямбда-функций Python:
- Лямбда-функция в Python может принимать любое количество аргументов, но они содержат только одно выражение. Выражение – это фрагмент кода, выполняемый лямбда-функцией, которая может возвращать или не возвращать какое-либо значение.
- Лямбда-функции могут использоваться для возврата функциональных объектов.
- Синтаксически лямбда-функции ограничены только одним выражением.
В этой статье мы подробно обсудим лямбда-функции Python, а также покажем примеры их использования.
Создание lambda
Мы используем следующий синтаксис для объявления лямбда-функции:
lambda argument(s): expression
Как указано выше, у нас может быть любое количество аргументов, но только одно выражение. Лямбда-оператор не может иметь никаких операторов и возвращает объект функции, который мы можем присвоить любой переменной.
Например:
remainder = lambda num: num % 2
print(remainder(5))
Вывод:
1
В этом коде лямбда-число: число %2 – это лямбда-функция. Число – это аргумент, а число %2 – выражение, которое вычисляет и возвращает результат выражения. Выражение получает модуль входного параметра равным 2. Если указать 5 в качестве параметра, который делится на 2, мы получаем остаток от 1.
Вы должны заметить, что лямбда-функции в приведенном выше скрипте не было присвоено никакого имени. Он просто возвращает объект функции, который назначается остатку идентификатора. Однако, несмотря на анонимность, мы могли вызывать ее так же, как вызываем обычную функцию. Заявление:
lambda num: num % 2
Аналогично следующему:
def remainder(num):
return num % 2
Вот еще один пример лямбда-функции:
product = lambda x, y : x * y
print(product(2, 3))
Вывод:
6
Определенная выше лямбда-функция возвращает произведение значений двух аргументов.
Зачем использовать лямбда-функции?
Лямбда-функции используются, когда вам нужна функция на короткий период времени. Это обычно, когда вы хотите передать функцию в качестве аргумента функциям более высокого порядка, то есть тем, которые принимают другие в качестве своих аргументов.
Использование анонимной функции внутри другой функции объясняется в следующем примере:
def testfunc(num):
return lambda x : x * num
В приведенном выше примере у нас есть функция, которая принимает один аргумент, его нужно умножить на неизвестное число. Давайте продемонстрируем, как использовать указанную выше функцию:
def testfunc(num):
return lambda x : x * num
result1 = testfunc(10)
print(result1(9))
Вывод:
90
В приведенном выше скрипте мы используем лямбда-функцию для умножения переданного числа на 10. Эту же функцию можно использовать для умножения числа на 1000:
def testfunc(num):
return lambda x : x * num
result2 = testfunc(1000)
print(result2(9))
Вывод:
9000
Мы можем использовать функцию testfunc() для определения двух вышеуказанных лямбда-функций в одной программе:
def testfunc(num):
return lambda x : x * num
result1 = testfunc(10)
result2 = testfunc(1000)
print(result1(9))
print(result2(9))
Вывод:
90
9000
Лямбда-функции можно использовать вместе со встроенными функциями Python, такими как map(), filter() и т.д.
В следующем разделе мы обсудим, как использовать лямбда-функции с различными встроенными функциями Python.
Функция filter()
Функция filter() в Python принимает лямбда-функцию вместе со списком в качестве аргументов. Он имеет следующий синтаксис:
filter(object, iterable)
Объектом здесь должна быть лямбда-функция, возвращающая логическое значение. Объект будет вызываться для каждого элемента в итерации для выполнения оценки. Результат – True или false для каждого элемента. Обратите внимание, что функция может принимать только одну итерацию в качестве входных данных.
Лямбда-функция вместе со списком для оценки передается в функцию filter(). Функция возвращает список тех элементов, которые возвращают True при оценке лямбда-функцией. Рассмотрим пример, приведенный ниже:
numbers_list = [2, 6, 8, 10, 11, 4, 12, 7, 13, 17, 0, 3, 21]
filtered_list = list(filter(lambda num: (num > 7), numbers_list))
print(filtered_list)
Вывод:
[8, 10, 11, 12, 13, 17, 21]
В приведенном выше примере мы создали список с именем numbers_list со списком целых чисел. Мы создали лямбда-функцию для проверки целых чисел, превышающих 7. Эта лямбда-функция была передана в функцию filter() в качестве аргумента, и результаты этой фильтрации были сохранены в новом списке с именем filter_list.
Функция map()
Функция map() – это еще одна встроенная функция, которая принимает объект функции и список. Синтаксис функции map следующий:
map(object, iterable_1, iterable_2, …)
Итерируемым элементом функции map() может быть словарь, список и т.д. Функция map() в основном сопоставляет каждый элемент во входном итерируемом элементе с соответствующим элементом в выходном итерации в соответствии с логикой, определенной лямбда-функцией. Рассмотрим следующий пример:
numbers_list = [2, 6, 8, 10, 11, 4, 12, 7, 13, 17, 0, 3, 21]
mapped_list = list(map(lambda num: num % 2, numbers_list))
print(mapped_list)
Вывод:
[0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]
В приведенном выше скрипте у нас есть список numbers_list, который состоит из случайных чисел. Затем мы вызываем функцию map() и передаем ей лямбда-функцию в качестве аргумента. Лямбда-функция вычисляет остаток после деления каждого числа на 2. Результат сопоставления сохраняется в списке с именем mapped_list. Наконец, мы распечатываем содержимое списка.
Заключение
В Python лямбда-функция – это однострочная функция, объявленная без имени, которая может иметь любое количество аргументов, но может иметь только одно выражение. Такая функция способна вести себя аналогично обычной функции, объявленной с использованием ключевого слова def. Часто лямбда-функция передается в качестве аргумента другой функции.