Помимо инструкции
def имеется возможность создавать объекты функций в форме выражений. Из-за сходства с аналогичной возможностью в языке LISP она получила название lambda. lambda x, y, z: x + y + zЭто выражение создает функцию, которая будет вызываться позднее, но в отличие от инструкции
def, выражение не связывает ее с именем. Именно поэтому lambda-выражения иногда называют анонимными (то есть безымянными) функциями. На практике они часто используются, как способ получить встроенную функцию или отложить выполнение фрагмента программного кода.
В общем виде lambda-выражение состоит из ключевого слова lambda, за которым следуют один или более аргументов (точно так же, как список аргументов в круглых скобках в заголовке инструкции def) и далее, вслед за двоеточием, находится выражение:
lambda argument1, argument2,... argumentN : выражение, использующее аргументы lambda – это выражение, а не инструкция. По этой причине это ключевое слово может появляться там, где синтаксис языка Python не позволяет использовать инструкцию
def – внутри литералов или в вызовах функций, например. Тело lambda-выражения сродни тому, что вы помещаете в инструкцию
return внутри определения def, – вы просто вводите результат в виде выражения вместо его явного возврата. Вследствие этого ограничения lambda-выражения менее универсальны, чем инструкция def – в теле lambda-выражения может быть реализована только логика, не использующая такие инструкции, как if. Такая реализация предусмотрена заранее – она ограничивает возможность создания большого числа уровней вложенности программ: lambda-выражения предназначены для создания простых функций, а инструкции def – для решения более сложных задач.
Если отвлечься от этих различий,
def и lambda выполняют одну и ту же работу. Как создаются функции с помощью инструкции def: def func(x, y, z): return x + y + zfunc(2, 3, 4) # 9Того же эффекта можно достигнуть с помощью lambda-выражения, явно присвоив результат имени, которое позднее будет использоваться для вызова функции:
f = lambda x, y, z: x + y + zf(2, 3, 4) # 9@zen_of_python