Как вы уже знаете, ключевое слово def используется для определения стандартных функций в Python. Но помимо таких обычных функций в Python есть так называемые анонимные или лямбда-функции. Для их создания используется ключевое слово lambda. Обычно такую функцию не следует использовать повторно.
Синтаксис:
lambda [args] : value
Лямбда-функция может иметь ноль или более аргументов перед символом ':'. При вызове такой функции выполняется выражение, указанное после ':'.
Пример определения лямбда-функции:
get_cube = lambda x : x ** 3
Приведенная выше лямбда-функция начинается с ключевого слова lambda, за которым следует параметр x. Выражение x ** 3 после ':' возвращает кубическое значение числа, переданного вызывающему коду. Сама функция lambda lambda x:x**3 назначается get_cube для последующего вызова в качестве именованной функции. Имя переменной становится именем функции, поэтому мы можем работать с ней как с обычной функцией.
Пример вызова лямбда-функции:
>>> get_cube(4)
64
Приведенное выше определение лямбда-функции похоже на следующую стандартную функцию:
def get_cube(x):
return x ** 3
Выражение не всегда должно возвращать значение. Следующая лямбда-функция ничего не возвращает.
Пример лямбда-функции, которая не возвращает значение:
>>> welcome = lambda user: print('Welcome, ' + name + '!')
>>> welcome('Anon')
Welcome, Anon!
Примечание:
Лямбда-функция может иметь только одно выражение. Очевидно, что она не может заменить функцию, тело которой содержит условные операторы, циклы и т. д.
Следующая функция lambda принимает несколько параметров.
Пример лямбда-функции с тремя параметрами:
>>> get_prod = lambda a, b, c : a * b * c
>>> get_prod(3, 5, 7)
105
Кроме того, лямбда-функция может принимать любое количество параметров.
Пример лямбда-функции с неопределенным количеством аргументов (используются только первые 3):
Лямбда-функция без параметров
>>> welcome = lambda : print('Welcome!')
>>> welcome()
Welcome!
Анонимная функция
Мы можем объявить лямбда-функцию и вызвать ее как анонимную функцию, не назначая ее переменной.
Пример анонимной лямбда-функции:
>>> (lambda x: x**3)(10)
1000
Здесь лямбда x:x3 определяет анонимную функцию и вызывает ее один раз, передавая аргументы в скобках (лямбда x:x3) (10).
В Python функции, такие как литералы, могут передаваться в качестве аргументов.
Лямбда-функции особенно полезны, когда мы хотим отправить функцию в качестве входных данных для другой функции. Мы можем передать анонимную лямбда-функцию, не присваивая ее переменной, в качестве аргумента другой функции.
Пример передачи лямбда-функции в качестве параметра:
def run_task(task):
print('Before running the task')
task()
print('After running the task')
run_task(lambda : print('Task is complete!')) # передача анонимной функции
important_task = lambda : print('Important task is complete!')
run_task(important_task) # передача лямбда-функции
Результат:
Before running the task
Task is complete!
After running the task
Before running the task
Important task is complete!
After running the task
Приведенная выше функция run_task() определена с параметром задачи, который вызывается как функция внутри run_task(). run_task(lambda: print('Задание завершено!')) вызывает функцию run_task() с анонимной лямбда-функцией в качестве аргумента.
Python имеет встроенные функции, которые принимают другие функции в качестве аргументов. Функции map(), filter() и Reduce() являются важными инструментами функционального программирования. Все они принимают функцию в качестве входных данных.
Такая функция-аргумент может быть либо обычной функцией, либо лямбда-функцией.
Пример передачи лямбда-функции в map():
>>> prime_cube_list = map(lambda x: x**3, [2, 3, 5, 7, 11]) # передача анонимной функции
>>> next(prime_cube_list)
8
>>> next(prime_cube_list)
27
>>> next(prime_cube_list)
125
>>> next(prime_cube_list)
343
>>> next(prime_cube_list)
1331
Источник: pythonru.com