lambda-функции в Python
Список вопросов к Python собеседованию
Что такое анонимная функция
В буквальном смысле, анонимная функция — это функция без имени. В Python анонимная функция создается с помощью ключевого слова lambda
.1
lambda
принимает произвольное количество аргументов, за которыми следует одно выражение. Оно становится телом функции, а его значение будет тем, что вернет лямбда-функция.
|
|
Следующие термины могут использоваться взаимозаменяемо в зависимости от языка программирования:
- Анонимные функции
- Лямбда-функции
- Лямбда-выражения
- Лямбда-абстракции
- Лямбда-форма
- Функциональные литералы
Аргументы lambda-функци
lambda
поддерживают все способы передачи аргументов:
- Позиционные аргументы;
- Именованные аргументы;
- Переменный список неименованных аргументов (*args);
- Переменный список именованных аргументов (**kwargs).
|
|
Отличия lambda от обычной функции
Лямбда имеет синтаксические отличия от обычной функции:
- Может содержать только выражение и не может включать операторы в свое тело;
- Записывается в одну строку;
- Не поддерживает аннотации типов;
- Может быть немедленно вызвана (IIFE);
- Не может содержать утверждения (
return
,pass
,assert
илиraise
вызовут исключениеSyntaxError
).
Декоратор может быть применен к лямбде. Хотя невозможно декорировать лямбду с помощью синтаксиса @decorator
, декоратор — это просто функция, поэтому он может вызывать функцию lambda
:
|
|
Особенности lambda-функции
- Часто используются с функциями более высокого порядка, которые принимают одну или несколько функций в качестве аргументов или возвращают одну или несколько функций.
- Может быть функцией более высокого порядка, принимая функцию (нормальную или лямбда-функцию) в качестве аргумента.
- Регулярно используется со встроенными функциями
map()
иfilter()
, а такжеfunctools.reduce()
, представленными в модулеfunctools
.
Лямбда-функций следует избегать, когда код:
- не следует руководству по стилю Python (PEP 8);
- выглядит громоздким и трудно читаемым.
Всегда используйте оператор
def
вместо оператора присваивания, который связывает лямбду непосредственно с идентификатором. (PEP 8)2
Примеры
|
|