Лямбда функция n го порядка
Функция 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 принимает функцию и список. Дает новый список, который содержит все измененные элементы, возвращаемые функцией для каждого элемента.
В этой статье вы узнаете о том, что такое лямбда-функции в Python. На самом деле, если вы знаете, что такое функции и умеете с ними работать, то знаете и что такое лямбда.
Лямбда-функция в Python — это просто функция Python. Но это некий особенный тип с ограниченными возможностями. Если есть желание погрузиться глубже и узнать больше, то эта статья целиком посвящена lambda .
Что такое лямбда в Python?
Прежде чем переходить как разбору понятия лямбда в Python, попробуем понять, чем является обычная функция Python на более глубоком уровне.
Для этого потребуется немного поменять направление мышление. Как вы знаете, все в Python является объектом.
Например, когда мы запускаем эту простейшую строку кода
Создается объект Python типа int , который сохраняет значение 5. x же является символом, который ссылается на объект.
Теперь проверим тип x и адрес, на которой он ссылается. Это можно сделать с помощью встроенных функций type и id .
В итоге x ссылается на объект типа int , а расположен он по адресу, который вернула функция id .
Просто и понятно.
А что происходит при определении вот такой функции:
Повторим упражнение и узнаем type и id объекта f .
Оказывается, в Python есть класс function , а только что определенная функция f — это его экземпляр. Так же как x был экземпляром класса integer . Другими словами, о функциях можно думать как о переменных. Разница лишь в том, что переменные хранят данные, а функции — код.
Это же значит, что функции можно передать в качестве аргументов другим функциям или даже использовать их как тип возвращаемого значения.
Рассмотрим простой пример, где функция f передается другой функции.
Попробуйте разобраться самостоятельно с тем, что делает этот код, прежде чем читать дальше.
Итак, modify_list — это функция, которая принимает список L и функцию fn в качестве аргументов. Затем она перебирает список элемент за элементом и применяет функцию к каждому из них.
Это общий способ изменения объектов списка, ведь он позволяет передать функцию, которая займется преобразованием. Так, если передать modify_list функцию f , то результатом станет список, где все значения будут возведены в квадрат.
Но можно передать и любую другую, которая изменит оригинальный список другим способом. Это очень мощный инструмент.
Теперь, когда с основами разобрались, стоит перейти к лямбда. Лямбда в Python — это просто еще один способ определения функции. Вот базовый синтаксис лямбда-функции в Python:
Лямбда принимает любое количество аргументов (или ни одного), но состоит из одного выражения. Возвращаемое значение — значение, которому присвоена функция. Например, если нужно определить функцию f из примера выше, то это можно сделать вот так:
Но возникает вопрос: а зачем нужны лямбда-функции, если их можно объявлять традиционным образом? Но на самом деле, они полезны лишь в том случае, когда нужна одноразовая функция. Такие функции еще называют анонимными. И, как вы увидите дальше, есть масса ситуаций, где они оказываются нужны.
Лямбда с несколькими аргументами
Определить лямбда-функцию с одним аргументом не составляет труда.
А если их должно быть несколько, то достаточно лишь разделить значения запятыми. Предположим, что нужна функция, которая берет два числовых аргумента и возвращает их произведение.
Отлично! А как насчет лямбда-функции без аргументов?
Лямбда-функция без аргументов
Допустим, нужно создать функцию без аргументов, которая бы возвращала True . Этого можно добиться с помощью следующего кода.
Несколько лямбда-функций
В определенный момент возникнет вопрос: а можно ли иметь лямбда-функцию из нескольких строк.
Ответ однозначен: нет.
Лямбда-функции в Python всегда принимают только одно выражение. Если же их несколько, то лучше создать обычную функцию.
Примеры лямбда-функций
Теперь рассмотрим самые распространенные примеры использования лямбда-функций.
Лямбда-функция и map
Распространенная операция со списками в Python — применение операции к каждому элементу.
map() — это встроенная функция Python, принимающая в качестве аргумента функцию и последовательность. Она работает так, что применяет переданную функцию к каждому элементу.
Предположим, есть список целых чисел, которые нужно возвести в квадрат с помощью map .
Обратите внимание на то, что в Python3 функция map возвращает объект Map , а в Python2 — список.
Так, вместо определения функции и передачи ее в map в качестве аргумента, можно просто использовать лямбда для быстрого определения ее прямо внутри. В этом есть смысл, если упомянутая функция больше не будет использоваться в коде.
Вот еще один пример.
Лямбда-функция и filter
filter() — это еще одна встроенная функция, которая фильтрует последовательность итерируемого объекта.
Другими словами, функция filter отфильтровывает некоторые элементы итерируемого объекта (например, списка) на основе какого-то критерия. Критерий определяется за счет передачи функции в качестве аргумента. Она же применяется к каждому элементу объекта.
Если возвращаемое значение — True , элемент остается. В противном случае — отклоняется. Определим, например, простую функцию, которая возвращает True для четных чисел и False — для нечетных:
С лямбда-функциями это все можно сделать максимально сжато. Код выше можно преобразовать в такой, написанный в одну строку.
И в этом сила лямбда-функций.
Лямбда-функция и сортировка списков
Сортировка списка — базовая операция в Python. Если речь идет о списке чисел или строк, то процесс максимально простой. Подойдут встроенные функции sort и sorted .
Но иногда имеется список кастомных объектов, сортировать которые нужно на основе значений одного из полей. В таком случае можно передать параметр key в sort или sorted . Он и будет являться функцией.
Функция применяется ко всем элементам объекта, а возвращаемое значение — то, на основе чего выполнится сортировка. Рассмотрим пример. Есть класс Employee .
Теперь создадим экземпляры этого класса и добавим их в список.
Предположим, что мы хотим отсортировать его на основе поля age сотрудников. Вот что нужно сделать для этого:
Лямбда-выражение было использовано в качестве параметра key вместо отдельного ее определения и затем передачи в функцию sort .
Пара слов о выражениях и инструкциях
Как уже упоминалось, лямбда могут иметь только одно выражение (expression) в теле.
Обратите внимание, что речь идет не об инструкции (statement).
Выражение и инструкции — две разные вещи, в которых часто путаются. В программировании инструкцией является строка кода, выполняющая что-то, но не генерирующая значение.
Например, инструкция if или циклы for и while являются примерами инструкций. Заменить инструкцию на значение попросту невозможно.
А вот выражения — это значения. Запросто можно заменить все выражения в программе на значения, и программа продолжит работать корректно.
- 3 + 5 — выражение со значением 8
- 10 > 5 — выражение со значением True
- True and (5 — выражение со значением False
Тело лямбда-функции должно являться выражением, поскольку его значение будет тем, что она вернет. Обязательно запомните это для работы с лямбда-функциями в будущем.
Лямбда-функции появились в C++11. Они представляют собой анонимные функции, которые можно определить в любом месте программы, подходящем по смыслу.
Приведу пример простейшей лямбда функции:
Выражение auto myLambda означает объявление переменной с автоматически определяемым типом. Крайне удобная конструкция C++11, которая позволяет сделать ваш код более лаконичным и устойчивым к изменениям. Настоящий тип лямбда-функции слишком сложный, поэтому набирать его нецелесообразно.
Непосредственное объявление лямбда-функции [ ] ( ) < std : : cout "Hello, lambda!" std : : endl ; >состоит из трех частей. Первая часть (квадратные скобки [ ] ) позволяет привязывать переменные, доступные в текущей области видимости. Вторая часть (круглые скобки ( ) ) указывает список принимаемых параметров лямбда-функции. Третья часть (в фигурных скобках < >) содержит тело лямбда-функции.
Программирование и разработка
Python имеет множество функций для реализации концепций функционального программирования. При написании программ функционального стиля часто требуются небольшие функции, объединяющие элементы. В Python есть встроенный способ сделать это с помощью лямбда-функций.
В компьютерном программировании анонимная функция (например, лямбда-выражение) — это функция, не привязанная к идентификатору. Лямбда-функции — важная часть функционального программирования, позволяющая писать одноразовые функции без необходимости называть их.
В этом руководстве по Python мы познакомим вас с лямбда-функциями в Python и покажем, как реализовать их в вашем собственном коде.
Что такое lambda functions?
Лямбда-функция — это небольшая анонимная функция, которая принимает любое количество аргументов, но имеет только одно выражение. Лямбда-функции возвращают объект, который назначен переменной или используется как часть других функций.
Лямбда-выражения отличаются от обычных определений функций по нескольким причинам. В частности, лямбда-функции ограничены одним выражением, поэтому они не могут использовать операторы или аннотации.
Когда дело доходит до значений, возвращаемых из лямбда-выражений, всегда есть неявный оператор возврата. Лямбда-функции оценивают выражение и автоматически возвращают результат.
Лямбда-функция не требует имени во время определения функции, в отличие от обычной функции. Мы создаем их с помощью lambdaключевого слова вместо традиционного defключевого слова. Структуру лямбда можно увидеть ниже:
История: Лямбда-выражения происходят от концепций лямбда-исчисления, модели вычислений, изобретенной Алонзо Чёрчем.
Хотя Python не является полностью функциональным языком, он добавил много функциональных концепций. В 1994 году filter(), map(), reduce()и lambdaоператор были добавлены к синтаксису. Другие объектно-ориентированные языки программирования, такие как Java и JavaScript, также добавили лямбда-выражения в более поздних версиях.
Когда использовать лямбда-функции
Лямбда-функции имеют множество вариантов использования, но чаще всего они используются, когда требуются объекты функций. Прелесть лямбда-функций в том, что они возвращают функциональные объекты.
Это делает их полезными при использовании наряду с функциями высшего порядка, которые требуют объекты функции в качестве аргументов, например map(), filter()илиfunctools.reduce()
Лучше всего использовать лямбды, когда выражение функции небольшое, чтобы облегчить читаемость. Рекомендуется использовать лямбда-функции, когда они обеспечивают кратчайший способ записи или вычисления чего-либо, например, когда:
- Возврат функции из функции
- Сортировка по альтернативному ключу
- Объединение элементов повторяющейся последовательности с reduce()
Когда вы привыкнете к лямбда-выражениям, вы начнете их довольно часто использовать. Они выразительны и при правильном использовании делают код короче и читабельнее. Чтобы максимально использовать лямбда, следуйте этим общим рекомендациям:
- Лямбды могут содержать только одно выражение. Если ваша функция не может быть выражена в одной строке, не используйте лямбда.
- Лучше всего использовать их только для короткого и простого кода, где поведение функции очевидно.
- Если при вызове функции используется несколько лямбда-выражений, может быть трудно увидеть, что происходит, и это не рекомендуется.
- Если одна и та же функция используется в нескольких местах, обычно лучше определить обычную функцию, чем повторять лямбда.
Как реализовать lambda functions Python
Лямбда-функция объявляется иначе, чем обычная функция. В Python лямбда-функции обладают следующими уникальными характеристиками:
- Он может содержать только выражения
- Он не может включать утверждения в свое тело
- Записывается в одну строку
- Он не поддерживает аннотации типов.
- Его можно сразу вызвать
Лямбда-функция в Python использует следующий базовый синтаксис. Как мы упоминали ранее, мы используем lambdaключевое слово для создания простой функции в выражении Python.
Лямбда-выражение может иметь любое количество аргументов (включая ни одного). Например:
В следующем примере мы используем лямбда-функцию для замены функции площади:
lambda Ключевое слово идентифицирует лямбда — выражение. В приведенном выше примере xэто единственный параметр. Двоеточие завершает список параметров и вводит тело функции.
Чтобы правильно использовать это выражение, поместите его везде, где вы обычно можете использовать объект функции. Этот фрагмент кода ниже создает временный анонимный функциональный объект и передает его в отсортированную функцию, которая затем выполняет сортировку.
Передача лямбда-функции в качестве значения ключевому параметру сортированной функции
Примечание. Лямбда-функции не имеют имен, но если вы действительно хотите, вы можете присвоить их переменной, как показано ниже:
Нет явных преимуществ в добавлении имени функции к лямбда-функции.
Примеры lambda Python
Теперь, когда мы понимаем, как лямбда-функции работают в Python, давайте подкрепим наши знания еще несколькими примерами и вариантами использования.
Читайте также: