какое слово зарезервировано для обозначения анонимной функции python
Лямбда-функции и анонимные функции в Python
Как вы уже знаете, ключевое слово def используется для определения стандартных функций в Python. Но, кроме таких обычных функций, в Python существуют так называемые анонимные или лямбда-функции. Для их создания используется ключевое слово lambda. Обычно такая функция не предназначена для повторного применения.
Лямбда-функция может иметь ноль или более аргументов перед символом ‘:’. При вызове такой функции выполняется выражение, указанное после ‘:’.
Пример определения лямбда-функции:
Приведенная выше лямбда-функция начинается с ключевого слова lambda, за которым следует параметр x. Выражение x ** 3 после ‘:’ возвращает вызывающему коду значение куба переданного числа. Сама лямбда-функция lambda x : x ** 3 присваивается переменной get_cube для ее последующего вызова как именованной функции. Имя переменной становится именем функции, чтобы мы могли работать с ней как с обычной функцией.
Пример вызова лямбда-функции:
Приведенное выше определение лямбда-функции аналогично следующей стандартной функции:
Выражение не обязательно должно всегда возвращать значение. Следующая лямбда-функция не возвращает ничего.
Пример лямбда-функции, не возвращающей значение:
Лямбда-функция может иметь только одно выражение. Очевидно, что она не может заменить функцию, тело которой содержит условия, циклы и т.д.
Следующая лямбда-функция содержит несколько параметров.
Пример лямбда-функции с тремя параметрами:
Также лямбда-функция может принимать любое количество параметров.
Пример лямбда-функции с неопределенным числом аргументов (используются только первые 3):
Лямбда-функция без параметров
Ниже приведен пример лямбда-функции без параметров.
Анонимная функция
Мы можем объявить лямбда-функцию и вызвать ее как анонимную функцию, не присваивая ее переменной.
Пример анонимной лямбда-функции:
Здесь lambda x: x3 определяет анонимную функцию и вызывает ее один раз, передавая аргументы в скобках (lambda x: x3)(10).
В Python функции, как и литералы, можно передавать в качестве аргументов.
Лямбда-функции особенно полезны, когда мы хотим отправить функцию на вход другой функции. Мы можем передать анонимную лямбда-функцию, не присваивая ее переменной, в качестве аргумента другой функции.
Пример передачи лямбда-функции в качестве параметра:
Представленная выше функция run_task() определена с параметром task, который вызывается как функция внутри run_task(). run_task(lambda : print(‘Task is complete!’)) вызывает функцию run_task() с анонимной лямбда-функцией в качестве аргумента.
В Python есть встроенные функции, которые принимают в качестве аргументов другие функции. Функции map(), filter() и reduce() являются важными инструментами функционального программирования. Все они принимают на вход функцию. Такая функция-аргумент может быть обычной функцией или лямбда-функцией.
Лямбда функции Python
Синтаксис лямбда-функции Python
Пример анонимной функции
Допустим, у нас есть функция для получения площади прямоугольника.
Давайте создадим анонимную функцию, используя ключевое слово lambda, чтобы получить площадь прямоугольника.
Когда использовать?
Лямбда-функция с map()
Функция map() принимает в качестве аргументов функцию и итерацию. Функция применяется к каждому элементу в итерируемом объекте, и возвращается обновленный итеративный объект.
Допустим, у нас есть список целых чисел. Мы должны создать новый список, умножив каждый элемент на 10. Мы можем использовать здесь лямбда-функцию вместо того, чтобы создавать функцию для этого единственного варианта использования.
С filter()
Встроенная функция filter() принимает в качестве аргумента функцию и итерацию. Функция применяется к каждому элементу итерации. Если функция возвращает True, элемент добавляется к возвращаемой итерации.
Допустим, у нас есть список целых чисел, и мы хотим удалить все нечетные числа. В окончательном списке должны быть только целые числа.
С reduce()
Функция reduce() присутствует в модуле functools. Эта функция принимает в качестве аргумента функцию и последовательность. Функция должна принимать два аргумента. Элементы из последовательности передаются в функцию вместе с накопленным значением. Конечный результат — одно значение.
Допустим, у нас есть список целых чисел, и мы хотим получить сумму всех его элементов.
Лямбда-функция Python без аргументов
Да, мы можем определить лямбда-функцию без аргументов. Но бесполезно, потому что оперировать будет не на чем. Давайте посмотрим на простой пример.
Поскольку лямбда-функция всегда возвращает одно и то же значение, мы можем просто присвоить ей переменную. Использование без аргументов — явное злоупотребление этой функцией.
Анонимные функции — Python: Функции
Иногда нам нужна функция, чтобы её передать куда-то (в функцию высшего порядка), но больше эта функция нигде не понадобится. Как вы можете знать, придумывание имён в программировании — одна из основных проблем. Но если функция нужна здесь и сейчас, а больше нигде её вызывать не придётся, то и имя такой функции не нужно! Такие одноразовые функции позволяют описывать практически все языки, умеющие работать с функциями как со значениями. В Python определение подобной одноразовой функции выглядит так:
Ключевое слово lambda названо в честь лямбда абстракции — основного кирпичика Лямбда Исчисления, математического аппарата, часто применяющегося в разработке языков программирования. В Лямбда Исчислении все функции — анонимные, поэтому анонимные функции во многих языках тоже иногда называют «лямбдами» или «лямбда-функциями».
Рассмотрим пример, использующий анонимную функцию:
Метод sort принимает в качестве аргумента key ссылку на функцию. В примере в качестве аргумента указана функция, меняющая знак у аргумента — поэтому список получается отсортирован от большего к меньшему. Сортировка с указанием ключа сама по себе встречается довольно часто, а вот ключи сортировки чаще всего будут разными. Поэтому выносить ключи в именованные функции смысла нет и анонимные функции здесь подходят идеально!
Особенности анонимных функций
Ещё одна особенность лямбда-функций заключается в том, что само объявление функции является выражением! Функции можно конструировать и тут же вызывать, не заканчивая выражение:
Этот пример выглядит забавно, но именно в таком виде лямбды встречаются редко. Зато часто можно встретить возврат лямбды из функции:
lambda-выражения, анонимные функции
Семантически, они просто синтаксический сахар для нормального определения функции.
Единственное преимущество использования лямбда-выражения вместо локально определенной функции состоит в том, что вам не нужно придумывать имя для функции. В отличие от лямбда-форм в других языках, где они добавляют функциональность. Лямбда-выражения Python являются лишь сокращенной записью, если вы слишком ленивы, чтобы определить функцию.
Отличие lambda-выражения от нормального определения функции:
Как и обычный объект функции, лямбда-выражения поддерживают различные способы передачи аргументов:
Как и вложенные функции, лямбда-функции могут ссылаться на переменные из содержащей области.
Пример использует lambda-выражение для возврата функции:
Код с частым использованием лямбда-функции сложно читать и понимать, а иногда можно и самому запутаться.
Второй код длиннее, но является более простым для понимания, в то время как комбинация reduce/lambda будет, скорее всего сложен для понимания многим программистам. В целом, передача одной функции другой, как правило, делает код более сложным, что вредит читаемости.
Лямбда-функции в основном используются:
c ключевыми функциями (функции принимают ключ в качестве параметра). Ключ может быть лямбда-выражением.
в качестве списка lambda-выражений. В результате получается список действий, выполняемых по требованию:
в качестве словаря, содержащего lambda-функции:
Анонимная функция в Python и лямбда выражение
Анонимная функция в Python – это функция, у которой нет имени. Следовательно, мы можем использовать функцию Anonymous для небольшого объема программы. Обычно мы определяем функцию Python с помощью ключевого слова def. Но мы определяем анонимную функцию с помощью ключевого слова лямбда. Базовая структура приведена ниже.
Посмотрите внимательно, что, принимая один или несколько аргументов, анонимная функция имеет только одно выражение. Итак, если мы хотим создать функцию, которая будет вычислять сумму двух чисел. Следующий код сделает это:
Но мы можем преобразовать эту функцию в анонимную функцию. Код будет таким:
Почему мы должны использовать анонимную функцию?
Может показаться, что мы можем заменить анонимную функцию обычной функцией. Тогда почему мы должны использовать ее? Во-первых, вам может потребоваться многократно выполнять одну задачу в пределах вашей области действия.
Следовательно, для этого вам понадобится временная функция. В этом вам поможет лямбда или анонимная функция. Потому что анонимная функция действительна между областями видимости, в то время как обычная функция действительна в программе.
Выражение или заявление
Основная путаница при реализации анонимной функции заключается в отсутствии возможности различать выражение и оператор. По сути, инструкция ничего не возвращает, в то время как выражение дает хотя бы одно значение.
Простые математические выражения, такие как сложение, умножение, деление, являются выражениями и могут использоваться в лямбда и анонимных функциях. Итак, вам нужно добавить выражение, чтобы результат выражения мог быть возвращен с помощью лямбда и анонимной функции.
Использование лямбда и анонимной функции
Теперь посмотрим, как часто используется лямбда. Используя функции map() и filter(), мы можем изменить список с помощью анонимной функции. Например, мы хотим увеличить все числа в списке на n. Для этого код должен быть таким:
Точно так же, если мы хотим сохранить общие элементы двух списков в новом списке, мы можем использовать фильтр. Чтобы проверить, находится ли элемент в List2, мы использовали лямбда-функцию. Пример кода приведен ниже:
Результатом вышеуказанной программы будет:
Ключевое слово lambda в python используется для создания анонимных функций.
Лямбда-функция в Python
Мы можем преобразовать вышеуказанную функцию в лямбда-функцию следующим образом:
Лямбда-функция в Python всегда возвращает результат выражения. Ниже приведен еще один пример, который принимает два аргумента и возвращает больший.
Лямбда-функция полезна для сопоставления или фильтрации любого списка.
Лямбда-функция в filter()
Если я хочу выполнить фильтрацию из списка, имеют ли значения в списке длину 3. Обратите внимание, что filter() – это функция, которая принимает два аргумента. Один – это функция, а второй – список значений. Вот код для него:
В строке 2 аргумент функции – это анонимная функция, которая принимает аргументы из списка дней недели. И проверьте, равна ли длина значения 3 или нет. Если 3, то необходимо вернуть значение, иначе ничего не будет возвращено. И результат соответствует тому, что мы хотели.
Использование лямбда-функции в map()
Мы также можем использовать лямбду в map(). map – это функция, которая принимает два аргумента: один – функция, другой – список. Следующий код представляет собой пример, который находит остаток от всего числа на 5.
Таким образом, вы можете создать анонимную функцию с помощью ключевого слова lambda. Для небольших функций полезна лямбда, как показано выше.