Лямбда функции в Python
Введение | |
Примеры | |
Отличия от обычных функций | |
Похожие статьи |
Введение
Лямбда функции названы так в честь лямбда исчисления, созданного америкаским математиком Алонзо Чёрчем
в тридцатых годах ХХ-го века.
В современных языках программирования лямбда функциями называют анонимные функции у которых несколько
ограничены возможность, но значительно укорочен синтаксис.
В 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 |
Легко доступны для тестирования | Сложны для тестирования так как их не вызвать по имени |
Примеры применения
Лямбда функции | |
Функции | |
Python |