Лямбда функции анонимные функции

Обновлено: 04.07.2024

Функция Python Lambda известна как анонимная функция, которая определяется без имени. Python позволяет нам не объявлять функцию стандартным образом, то есть с помощью ключевого слова def. Анонимные функции объявляются с использованием ключевого слова лямбда. Однако лямбда-функции могут принимать любое количество аргументов, но они могут возвращать только одно значение в форме выражения.

Анонимная функция содержит небольшой фрагмент кода. Она имитирует встроенные функции C и C ++, но это не совсем встроенная функция.

Синтаксис для определения анонимной функции

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

Рассмотрим следующий пример лямбда-функции.

Пример 1

В приведенном выше примере мы определили анонимную функцию лямбда a: a + 10, где a – аргумент, а a + 10 – выражение. Данное выражение оценивается и возвращает результат. Вышеупомянутая лямбда-функция такая же, как и обычная функция.

Пример 2

Несколько аргументов лямбда-функции

Зачем использовать лямбда функцию в Python?

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

Лямбда-функция обычно используется со встроенными функциями Python, функциями filter() и map().

Использование с filter()

Встроенная функция filter() принимает в качестве аргумента функцию и список. Это эффективный способ отфильтровать все элементы последовательности. Он возвращает новую последовательность, в которой функция оценивает значение True.

Рассмотрим следующий пример, в котором мы отфильтровываем единственное нечетное число из данного списка.

Использование с map()

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


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

Анонимные функции — это функции, которым не присваивается идентификатор и которые объявляются в месте использования. Они применимы во многих языках программирования. Однако их синтаксис от языка к языку заметно разнится. Лямбда-выражение — это элемент синтаксиса, который нужен для определения анонимной функции.

Итак, мы проанализировали несколько статей на тему анонимных функций и лямбда-выражений и представим здесь их краткий адаптированный перевод или ссылки, чтобы вы сами могли выбрать те темы, которые вам интересны. За основу мы взяли статью пишущего программиста Ankit Patel, поехали!

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

Python для веб-разработки

После обучения вы сможете в одиночку создавать и поддерживать сайты. Авторская программа от эксперта-практика. Скидка по промокоду BLOG 5%.

Замыкание

Функции, которые могут вычисляться в среде, содержащей связанные переменные.

Карринг*

*Название в честь Карри Хаскела, разработчика комбинаторной логики, в которой сведение к функциям одного аргумента носит основополагающий характер, источник — Wikipedia.

Для получения определенного результата функция, которая претерпевает процесс изменения, в результате которого она принимает меньшее количество входных данных, называется каррируемой.


Ключевое слово лямбда

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

lamdba arg1,arg2, …argN:

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

Использование лямбда-выражений в качестве ключевых

Использование лямбда-выражений с функциями высшего порядка в Python

1. Map ()

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

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

2. Filter ()

Сходным образом мы можем использовать функцию filter, которая выводит данные на основе определенного условия.

3. Reduce ()

Более подробно почитать об этих функциях можно в статье Full Stack- разработчика, Rupesh Mishra. Он рассказывает как их использовать, описывая базовый синтаксис и снабжая все это примерами.

Python для веб-разработки

После обучения вы сможете в одиночку создавать и поддерживать сайты. Авторская программа от эксперта-практика. Скидка по промокоду BLOG 5%.

В каких случаях нужно использовать лямбда-выражения?

  1. Когда вам нужно вычислить результат с помощью какого-либо выражения.
  2. Когда вы не хотите совершать ненужные вызовы функций.

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

Они не поддерживают строку документации, и поэтому задокументировать их функциональность крайне сложно.

Добавим, что, безусловно, работа веб-разработчика предполагает использование лямбда-выражений, но только по-настоящему хорошие веб-разработчики умеют не использовать эти инструменты там, где это не нужно. Об этом читайте в статье Monty Python. Он подробно описывает преимущества и недостатки лямбда-выражений и приводит примеры их неудачного использования.

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


Python lambdas - это небольшие, анонимные, суб-синтаксические работы, которые более ограничены, но короче, чем обычные функции Python.

В этой статье мы увидим все о лямбде. Мы обсудим и постараемся ответить на следующий вопрос о лямбде:

  1. Откуда появилась лямбда
  2. Что такое лямбда-функция
  3. Как использовать лямбда-функцию
  4. Когда следует избегать лямбда-функции
  5. Альтернативы лямбда

Откуда появилась лямбда

История лямбда началась еще в 30-х годах прошлого века. Алонзо Черч, наиболее известный своим лямбда-исчислением, тезисом Черча – Тьюринга, был американским математиком и логиком, формализовавшим лямбда-исчисление. Функциональные языки берут свое начало в математической логике и лямбда-исчислении, в то время как ключевые языки программирования используют модель вычислений на основе состояний, разработанную Аланом Тьюрингом. Две вычислительные модели, лямбда-исчисление и машины Тьюринга, можно преобразовать в одну. Это сходство известно как гипотеза Черча-Тьюринга.

Функциональные языки, такие как Haskell и Lisp, наследуют лямбда-исчисление, но такие языки, как Python или C, наследуют императивное программирование.

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

Я могу подробнее рассказать об истории лямбда, но это не наша основная тема для обсуждения. Итак, перейдем к следующей теме.

Что такое лямбда-функция

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

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

Если мы сравним лямбда-функцию и обычную функцию, то,

  1. Лямбда - функция может принимать любое число аргументов, но может иметь только одно выражение, в то время как обычная функция имеет точное количество аргументов, которые мы объявляем в момент определения.
  2. Лямбда-функция - это однострочные функция. Ее тело содержит выражение в той же строке, в которой оно определено. В обычных функциях, функции содержат блоки тела, в которых определены для выполнения некоторые операторы.
  3. Поскольку лямбда - это однострочная функция, ее можно вызвать мгновенно, но обычная функция должна вызывать сама себя и требовать времени для вызова.

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

Части лямбда-выражения.

Ключевое слово - лямбда.

Аргументы - x и y.

Выражение - x * y

Мы можем передать аргументы функции, заключив функцию и ее аргумент в круглые скобки:

Ниже приведен пример передачи аргументов в одной строке.


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

Как использовать лямбда-функцию

До сих пор я излогал теоритические сведения о лямбда, поэтому мы разберемся, как использовать лямбда, с помощью примеров.

Пример 1 Напишите программу для вычисления экспоненты с помощью лямбда-функции.

Рассчет показатель

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

  1. Сначала я определяю лямбда-выражение для вычисления экспоненты.
  2. Передаю это выражение лямбда-функции, представленной квадратным прямоугольником.
  3. Лямбда-функция представлена ​​прямоугольником. Она даст вам результат после выполнения расчета.
  4. Код ниже.

Я взял другие значения, но это не проблема.

Теперь я хочу обсудить здесь еще одну очень важную вещь. Лишь немногие программисты обсуждают это. Для этого я беру другой пример.


Сначала разбираемся в коде.

  1. Я просто определил строку и сохранил ее в переменной name, которая была передана лямбда-выражению в качестве параметра.
  2. После этого объявил лямбду, которая печатает результат.
  3. Но результата не получил.

Это потому, что сама лямбда возвращает объект функции. В приведенном выше примере лямбда просто возвращает объект функции и место в памяти, где он хранится. И вывод, который мы получаем на консоли, - это то место.

Теперь я внесу некоторые изменения, чтобы получить желаемый результат.


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


Теперь он дает мне правильный результат, который мне нужен обоими способами.

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

Здесь вам нужно понять, когда использовать лямбда, а когда избегать.

Теперь я напишу тот же код с обычной функцией.


Насколько это просто?

Когда следует избегать лямбда-функции

Итак, нам нужно избегать лямбда для простых задач и понимать использование лямбда.

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

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

Вот некоторые моменты против использования лямбда-функции в Python:

  1. Читаемость кода
  2. Заставлять мыслить функционально
  3. Странный синтаксис
  4. Загадочный стиль

Альтернативы лямбда

Понимание списков - лучшая альтернатива лямбда. В некоторых случаях лямбда-выражение используется с функциями map (), reduce () и filter (), но то же самое может быть выполнено с пониманием списка вместе с циклом for.

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

Что такое лямбда-функция в Python?

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

Лямбда-функция имеет следующий синтаксис.

lambda arguments: expression

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

Пример

Вот пример лямбда-функции, которая удваивает входное значение:

В приведенной выше программе лямбда x: x * 2 ‒ это лямбда-функция. Здесь x ‒ аргумент, а x * 2 ‒ выражение, которое вычисляется и возвращается.

У этой функции нет названия. Он возвращает объект функции, который назначен идентификатору double. Теперь мы можем вызывать это как обычную функцию.

Почти то же самое, что:

Использование

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

В Python мы обычно используем его в качестве аргумента функции высшего порядка (функции, которая принимает другие функции в качестве аргументов). Лямбда-функции используются вместе со встроенными функциями, такими как filter(), map() и т.д.

Пример использования с filter()

Функция filter() в Python принимает в качестве аргументов функцию и список.

Метод вызывается со всеми элементами в списке, и возвращается новый список, содержащий элементы, для которых функция оценивается как True.

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

Пример использования с map()

Функция map() принимает функцию и список.

Метод вызывается со всеми элементами в списке, и возвращается новый список, содержащий элементы, возвращаемые этой функцией для каждого элемента.

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

Читайте также: