Лямбда-функции и анонимные функции в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

Как вы уже знаете, ключевое слово 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

Теги записи: Python, Functions, Lambda,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)