Лямбда функции в Python

/ru/code/python/basics/docstring/

Введение

Лямбда функции названы так в честь лямбда исчисления, созданного америкаским математиком Алонзо Чёрчем в тридцатых годах ХХ-го века.

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

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

Пример

>>> (lambda x: x + 1)(2)

3

Как это работает:

(lambda x: x + 1)(2) = lambda 2: 2 + 1 = 2 + 1 = 3

>>> add_one = lambda x: x + 1
>>> add_one(2)

3

Пример применения лямбды для создания ключа при сортировке функцией sorted() .

scientists = [ 'Marie Curie', 'Dmitri Mendeleev', 'Nikolay Basov', 'Alexander Popov', 'Igor Kurchatov', 'Niels Bohr', 'Oliver Heaviside','Max Planck', 'Isaac Newton', 'Rosalind Franklin' ] # Имя из строки преобразуется в список # из списка достаётся последний элемент # который используется в качестве ключа print(sorted(scientists, key=lambda name: name.split()[-1])) # Лямбда это выражение, которое возвращает # вызываемый объект (callable object) last_name = lambda name: name.split()[-1] print(last_name) print(last_name("Nikola Tesla")) # Если не использовать лямбду # функции по извлечению имени # и фамиил будут выглядеть так: def last_name(name): return name.split()[-1] def first_name(name): return name.split()[0] print(l_name("Nikola Tesla")) print(first_name("Nikola Tesla"))

['Nikolay Basov', 'Niels Bohr', 'Marie Curie', 'Rosalind Franklin', 'Oliver Heaviside', 'Igor Kurchatov', 'Dmitri Mendeleev', 'Isaac Newton', 'Max Planck', 'Alexander Popov'] <function <lambda> at 0x7f2ccf9c3af0> Tesla Tesla Nikola

Отличия от обычных функций

Функции Лямбды
def name(args): body lambda args: expr
Инструкция (statement), которая определяет функцию и связывает её с именем Выражение (expression), которое вычисляется (evaluates) в функцию
Обязана иметь имя Не имеет имени
Аргументы заключены в круглые скобки и перечислены через запятую Список аргументов, разделённых запятыми заканчивается двоеточием
Поддерживается ноль и более аргументов. Ноль аргументов означает пустые скобки Поддерживается ноль и более аргументов. Ноль аргументов означает двоеточие сразу после lambda (lambda:)
Тело функции это блок (с правильным отступом) инструкций Тело лямбды это одно выражение
Чтобы функция возвращала что-то отличное от None нужна инструкция return Возвращаемое значнеие определяется в выражении, содеражащемся в теле. Инструкцию return использовать нельзя.
Может иметь docstring Не может иметь docstring
Легко доступны для тестирования Сложны для тестирования так как их не вызвать по имени

Примеры применения

Автор статьи: Андрей Олегович