Что такое лямбда в математике

Обновлено: 04.07.2024

Лямбда-исчисление (также пишется как λ-исчисление) это формальная система в математическая логика для выражения вычисление на основе функции абстракция и заявление используя переменную привязка и замена. Это универсальный модель вычисления который можно использовать для моделирования любого Машина Тьюринга. Его ввел математик Церковь Алонсо в 1930-х годах в рамках его исследования основы математики.

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

СинтаксисИмяОписание
ИксПеременнаяСимвол или строка, представляющая параметр или математическое / логическое значение.
Икс.M)АбстракцияОпределение функции (M является лямбда-термином). Переменная Икс становится граница в выражении.
(M N)ЗаявлениеПрименение функции к аргументу. M и N - лямбда-термины.

производя такие выражения, как: (λИксу. (λz. (λИкс.z x) (λу.z y)) (х у)). Скобки можно опустить, если выражение однозначно. Для некоторых приложений могут быть включены термины для логических и математических констант и операций.

Операции восстановления включают:

ОперацияИмяОписание
Икс.M[Икс]) → (λу.M[у])α-преобразованиеПереименование связанных переменных в выражении. Используется, чтобы избежать коллизии имен.
((λИкс.M) E) → (M[Икс := E])β-редукцияЗамена связанных переменных выражением аргумента в теле абстракции.

Если Индексирование де Брёйна используется, то α-преобразование больше не требуется, так как не будет конфликтов имен. Если повторное применение этапов редукции в конечном итоге завершается, то к Теорема Черча – Россера это произведет β-нормальная форма.

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

Содержание

Объяснение и приложения

Лямбда-исчисление Тьюринг завершен, то есть это универсальный модель вычисления который можно использовать для моделирования любого Машина Тьюринга. [1] Его тезка, греческая буква лямбда (λ), используется в лямбда-выражения и лямбда-термины обозначать привязка переменная в функция.

Лямбда-исчисление может быть нетипизированный или же напечатанный. В типизированном лямбда-исчислении функции могут применяться только в том случае, если они способны принимать заданный "тип" входных данных. Типизированные лямбда-исчисления слабее чем нетипизированное лямбда-исчисление, которое является основной темой этой статьи, в том смысле, что типизированные лямбда-исчисления могут выразить меньше чем нетипизированное исчисление, но, с другой стороны, типизированные лямбда-исчисления позволяют доказать больше вещей; в просто типизированное лямбда-исчисление это, например, теорема, согласно которой каждая стратегия оценки завершается для каждого просто типизированного лямбда-члена, тогда как оценка нетипизированных лямбда-членов не должна завершаться. Одной из причин, по которой существует множество различных типизированных лямбда-исчислений, было желание сделать больше (того, что может делать нетипизированное исчисление), не отказываясь от возможности доказать сильные теоремы об исчислении.

Лямбда-исчисление имеет приложения во многих различных областях в математика, философия, [2] лингвистика, [3] [4] и Информатика. [5] Лямбда-исчисление сыграло важную роль в развитии теории теория языков программирования. Функциональные языки программирования реализовать лямбда-исчисление. Лямбда-исчисление также является актуальной темой исследований в Теория категорий. [6]

История

Лямбда-исчисление было введено математиком Церковь Алонсо в 1930-х годах в рамках расследования основы математики. [7] [а] Было показано, что исходная система логически непоследовательный в 1935 году, когда Стивен Клини и Дж. Б. Россер разработал Парадокс Клини – Россера. [8] [9]

Впоследствии, в 1936 году, Черч выделил и опубликовал только ту часть, которая имеет отношение к вычислениям, то, что сейчас называется нетипизированным лямбда-исчислением. [10] В 1940 году он также представил более слабую в вычислительном отношении, но логически последовательную систему, известную как просто типизированное лямбда-исчисление. [11]

До 1960-х годов, когда было выяснено его отношение к языкам программирования, лямбда-исчисление было всего лишь формализмом. Благодаря Ричард Монтегю и других приложений лингвистов в семантике естественного языка, лямбда-исчисление начало занимать почетное место в обеих лингвистике. [12] и информатика. [13]

Происхождение символа лямбда

По поводу того, почему Черч использует греческую букву, существует некоторое противоречие. лямбда (λ) как обозначение функции-абстракции в лямбда-исчислении, возможно, частично из-за противоречивых объяснений самого Черча. По словам Кардоне и Хиндли (2006):

Дана Скотт также обращался к этому противоречию в различных публичных лекциях. [14] Скотт вспоминает, что однажды он задал вопрос о происхождении лямбда-символа зятю Черча Джону Аддисону, который затем написал своему тестю открытку:

Уважаемый профессор Черч,

Рассел имел оператор йоты, Гильберт обладал эпсилон-оператор. Почему вы выбрали лямбду для своего оператора?

По словам Скотта, весь ответ Черча состоял в том, чтобы вернуть открытку со следующей аннотацией: "Ини, Мини, Мини, Мо".

Неформальное описание

Мотивация

можно переписать на анонимная форма в качестве

(читается как "кортеж Икс и у является нанесенный на карту к Икс 2 + у 2 + y ^ > "). По аналогии,

можно переписать в анонимной форме как

где ввод просто сопоставляется сам с собой.

может быть переработан в

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

тогда как оценка каррированной версии требует еще одного шага

чтобы достичь того же результата.

Лямбда-исчисление

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

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

Лямбда-термины

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

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

Функции, которые работают с функциями

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

Альфа-эквивалентность

Для определения β-редукции необходимы следующие определения:

Бесплатные переменные

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

Замены с избеганием захвата

β-редукция

Лямбда-исчисление можно рассматривать как идеализированную версию функционального языка программирования, например Haskell или же Стандартный ML.С этой точки зрения β-редукция соответствует шагу вычислений. Этот шаг можно повторять путем дополнительных β-редукций до тех пор, пока не останется больше приложений для уменьшения. В нетипизированном лямбда-исчислении, представленном здесь, этот процесс редукции не может завершаться. Например, рассмотрим термин Ω = ( λ Икс . Икс Икс ) ( λ Икс . Икс Икс ) .Здесь ( λ Икс . Икс Икс ) ( λ Икс . Икс Икс ) → ( Икс Икс ) [ Икс := λ Икс . Икс Икс ] = ( Икс [ Икс := λ Икс . Икс Икс ] ) ( Икс [ Икс := λ Икс . Икс Икс ] ) = ( λ Икс . Икс Икс ) ( λ Икс . Икс Икс ) То есть термин сводится к самому себе за одно β-восстановление, и поэтому процесс восстановления никогда не закончится.

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

Формальное определение

Определение

Лямбда-выражения состоят из:

  • переменные v1, v2, . ;
  • символы абстракции λ (лямбда) и. (точка);
  • скобки ().

Набор лямбда-выражений Λ может быть определяется индуктивно:

  1. Если Икс переменная, то Икс ∈ Λ.
  2. Если Икс переменная и M ∈ Λ, то (λИкс.M) ∈ Λ.
  3. Если M, N ∈ Λ, то (M N) ∈ Λ.

Примеры правила 2 известны как абстракции и примеры правила 3 ​​известны как Приложения. [15] [16]

Обозначение

Чтобы не перегружать нотацию лямбда-выражений, обычно применяются следующие соглашения:

  • Крайние круглые скобки опускаются: M N вместо (M N).
  • Предполагается, что приложения левоассоциативны: вместо ((M N) P) можно написать M N P. [17]
  • Тело абстракции расширяется как можно правее: λИкс.M N означает λИкс.(M N), а не (λИкс.M) N.
  • Сжимается последовательность абстракций: λИксуz.N сокращенно λxyz.N. [18][17]

Свободные и связанные переменные

Говорят, что оператор абстракции λ связывает свою переменную везде, где она встречается в теле абстракции. Переменные, попадающие в область действия абстракции, называются граница. В выражении λИкс.M, часть λИкс часто называют связующее, как намек на то, что переменная Икс связывается добавлением λИкс к M. Все остальные переменные называются свободный. Например, в выражении λу.х х у, у является связанной переменной и Икс это свободная переменная. Также переменная привязана к ближайшей абстракции. В следующем примере единственное вхождение Икс в выражении связана второй лямбдой: λИкс.уИкс.z x).

Набор свободные переменные лямбда-выражения, M, обозначается FV (M) и определяется рекурсией по структуре терминов следующим образом:

Выражение, не содержащее свободных переменных, называется закрыто. Замкнутые лямбда-выражения также известны как комбинаторы и эквивалентны условиям в комбинаторная логика.

Снижение

Значение лямбда-выражений определяется тем, как выражения могут быть сокращены. [20]

Есть три вида сокращения:

  • α-преобразование: изменение связанных переменных;
  • β-редукция: применение функций к их аргументам;
  • η-редукция: который отражает понятие протяженности.

Мы также говорим о полученных эквивалентностях: два выражения α-эквивалент, если их можно α-преобразовать в одно и то же выражение. Аналогично определяются β-эквивалентность и η-эквивалентность.

Период, термин редекс, Короче для сводимое выражение, относится к подтерминам, которые могут быть сокращены одним из правил сокращения. Например, (λИкс.M) N является β-редексом в выражении замены N за Икс в M. Выражение, к которому сводится редекс, называется его сокращать; редукция (λИкс.M) N является M[Икс := N].

Если Икс не бесплатно в M, λИкс.M x также является η-редексом с редукцией M.

α-преобразование

α-преобразование, иногда известное как α-переименование, [21] позволяет изменять имена связанных переменных. Например, α-преобразование λИкс.Икс может дать λу.у. Термины, которые отличаются только α-преобразованием, называются α-эквивалент. Часто при использовании лямбда-исчисления α-эквивалентные термины считаются эквивалентными.

Точные правила α-преобразования не совсем тривиальны.Во-первых, при α-преобразовании абстракции переименовываются только вхождения переменных, которые связаны с той же абстракцией. Например, α-преобразование λИксИкс.Икс может привести к λуИкс.Икс, но это могло нет приводит к λуИкс.у. Последний имеет значение, отличное от оригинала. Это аналогично понятию программирования переменное затенение.

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

В языках программирования со статической областью видимости α-преобразование может использоваться для разрешение имени проще, гарантируя, что имя переменной маски имя в содержащем объем (видеть α-переименование для упрощения разрешения имен).

в Индекс Де Брёйна обозначение, любые два α-эквивалентных термина синтаксически идентичны.

Замена

Замена, письменная M[V := N], это процесс замены всех свободный появления переменной V в выражении M с выражением N. Подстановка терминов лямбда-исчисления определяется рекурсией по структуре терминов следующим образом (примечание: x и y являются только переменными, а M и N - любыми лямбда-выражениями):

Икс[Икс := N] = N у[Икс := N] = у, если Иксу (M1 M2)[Икс := N] = (M1[Икс := N]) (M2[Икс := N]) (λИкс.M)[Икс := N] = λИкс.Mу.M)[Икс := N] = λу.(M[Икс := N]), если Иксу и у ∉ FV (N)

Для замены в абстракцию иногда необходимо α-преобразовать выражение. Например, это неверно для (λИкс.у)[у := Икс], чтобы получить λИкс.Икс, потому что замененный Икс должен был быть свободным, но оказался связанным. Правильная подстановка в этом случае - λz.Икс, с точностью до α-эквивалентности. Подстановка определяется однозначно с точностью до α-эквивалентности.

β-редукция

β-редукция отражает идею применения функции. β-редукция определяется в терминах замещения: β-редукция (λV.M) N является M[V := N].

Например, предполагая некоторую кодировку 2, 7, ×, мы имеем следующую β-редукцию: (λп.п × 2) 7 → 7 × 2.

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

η-редукция

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

η-редукция можно рассматривать как то же самое, что и концепция местная полнота в естественный вычет, через Изоморфизм Карри – Ховарда.

Нормальные формы и слияние

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

Однако можно показать, что β-редукция сливаться при работе с α-преобразованием (т.е. мы считаем две нормальные формы равными, если возможно α-преобразование одной в другую).

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

Кодирование типов данных

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

Арифметика в лямбда-исчислении

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

и так далее. Или используя альтернативный синтаксис, представленный выше в Обозначение:

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


Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать Карту слов. Я отлично умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!

Спасибо! Я стал чуточку лучше понимать мир эмоций.

Вопрос: марш-бросок — это что-то нейтральное, положительное или отрицательное?

Синонимы к слову «лямбда»

Предложения со словом «лямбда»

Начальная функция масс (НФМ) является эмпирической функцией, описывающей распределение масс звёзд в элементе объёма с точки зрения их начальной массы (масса с которой они сформировались). Свойства и эволюция звёзд тесно связаны с их массой, поэтому НФМ является важным предсказательным инструментом для астрономов при изучении большого количества звёзд. НФМ относительно инвариантна для похожих групп звезд. Важным является предположение о единстве, универсальности НФМ для всей Галактики или, по крайней.

Функция масс двойных звёзд (англ. Binary mass function) — функция, создающая ограничения для массы ненаблюдаемого компонента (звезды или экзопланеты) в спектрально-двойных звёздах или планетных системах с одной линией. Значение определяется по наблюдаемым характеристикам: по орбитальному периоду двойной системы и пику лучевой скорости наблюдаемой звезды. Скорость одного компонента двойной и орбитальный период двойной системы предоставляют частичную информацию о расстоянии и гравитационном взаимодействии.

Симбиотические звёзды — небольшой класс двойных звезд, имеющих сложные спектры, где наряду с полосами поглощения TiO имеются эмиссионные линии. В их спектрах были обнаружены линии, характерные для туманностей (ОIII, NeIII и т. п.), линии однократно ионизованных металлов, а также запрещённые линии высокой ионизации (например: FeVIII). Все известные к настоящему моменту времени симбиотические звёзды являются переменными с периодами в несколько сотен дней.

Затме́нные звёзды (затме́нные переме́нные, затме́нные двойны́е, фотометри́ческие двойны́е) — звездные системы, в которых наблюдается периодическое изменение блеска вследствие затмений одной звезды другой.

Переменные звезды имеют специальные обозначения, если они ещё не были обозначены буквой греческого алфавита, в формате обозначения Байера, в сочетании с именем созвездия в родительном падеже, в котором эта звезда находится. (см. Список созвездий и их латинское название (родительный падеж)).

Что такое лямбда в мире компьютерных наук для человека без опыта работы в области компьютерных технологий?

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

Лямбда происходит от лямбда-исчисления и относится к анонимным функциям в программировании.

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

питон

Как видно из фрагмента Python, функция adder принимает аргумент x и возвращает анонимную функцию или лямбду, которая принимает другой аргумент y. Эта анонимная функция позволяет вам создавать функции из функций. Это простой пример, но он должен передать силу лямбды и замыкания.

Примеры на других языках

Perl 5

JavaScript

JavaScript (ES6)

Схема

стриж

PHP

Haskell

Ява увидеть этот пост

Lua

Котлин

Рубин

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

Ruby - это Ruby, для ламбд есть сокращение, поэтому вы можете определить adder это следующим образом:

р

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

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

@KyleDelaney действительно, анонимность не является обязательным условием для лямбды, действительно есть лямбда-функции, которые не являются анонимными, как вы указываете на них даже в примере

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

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

Я бы предложил Console.WriteLine("Calculator: op " + op.Method.Name + " (" + a + ", " + b + ") text-muted font-weight-lighter"> — 23

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

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

Простой пример (используя Scala для следующей строки):

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

за исключением того, что вам не нужно беспокоиться о:

  1. Объявление функции где-то еще (и необходимость искать ее при повторном рассмотрении кода позже).
  2. Называя что-то, что вы используете только один раз.

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

вместо того, чтобы просто написать выражение, где оно вам нужно:

Точная запись варьируется от языка к языку; Греческий не всегда требуется! ;-)

Это относится к лямбда-исчислению , которое является формальной системой, которая просто имеет лямбда-выражения, которые представляют функцию, которая принимает функцию в качестве единственного аргумента и возвращает функцию. Все функции в лямбда-исчислении относятся к этому типу, т.е. λ : λ → λ .

Лисп использовал лямбда-концепцию для именования литералов своих анонимных функций. Эта лямбда представляет функцию, которая принимает два аргумента, x и y, и возвращает их произведение:

Это может быть применено в строке, как это (оценивается до 50 ):

Лямбда-исчисление является последовательной математической теорией замещения. В школьной математике можно увидеть, например, в x+y=5 паре с x−y=1 . Наряду со способами манипулирования отдельными уравнениями также возможно объединить информацию из этих двух, при условии, что подстановки между уравнениями выполняются логически. Лямбда-исчисление кодифицирует правильный способ сделать эти замены.

Учитывая, что y = x−1 это допустимая перестановка второго уравнения, это: λ y = x−1 означает функцию, заменяющую символы x−1 для символа y . Теперь представьте себе применение λ y к каждому члену в первом уравнении. Если термин - y тогда выполнить замену; иначе ничего не делать. Если вы сделаете это на бумаге, вы увидите, как применять это λ y сделает первое уравнение разрешимым.

Это ответ без какой-либо информатики или программирования.

Вот как квадратная функция может быть определена в императивном языке программирования (C):

Переменная x является формальным параметром, который заменяется фактическим значением, которое должно быть возведено в квадрат при вызове функции. На функциональном языке (Схема) такая же функция будет определена:

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

лямбда

Немного упрощено: лямбда-функция - это функция, которая может быть передана другим функциям, и ее логика доступна.

LinqToSql может прочитать эту функцию (x> 15) и преобразовать ее в фактический SQL для выполнения с использованием деревьев выражений.

Заявление выше становится:

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

Теперь дерево выражений не может быть прочитано - SomeComplexCheck не может быть разбит. Оператор SQL будет выполняться без где и каждая строка в данных будет пропущена SomeComplexCheck .

Лямбда-функции не следует путать с анонимными методами. Например:

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


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.

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