Лямбда-функции в Python – объяснение с примерами

Python – один из самых интуитивно понятных языков программирования. Тем не менее, некоторые вещи могут быть сложными для понимания и осмысления. Лямбда-функции – одно из них.

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Я через это прошёл. Когда я только начинал изучать Python, я пропустил лямбда-функцию, потому что она была мне непонятна. Но со временем я начал её понимать. Так что не волнуйтесь – если вы тоже испытываете трудности, я помогу вам разобраться.

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

Что такое лямбда-функции?

Лямбда-функции похожи на обычные пользовательские функции, только у них нет имени. Их обычно называют анонимными функциями. Они удобны, когда вы хотите создать функцию, содержащую только простые выражения – то есть выражения, которые обычно состоят из одной строки с инструкцией. Они также полезны, когда вы хотите использовать функцию только один раз.

Как определить лямбда-функцию?

Вы можете определить лямбда-функцию следующим образом:

lambda argument(s): expression
  1. lambda – ключевое слово в Python для определения анонимной функции.
  2. argument(s) – это переменная для хранения значения, которое вы хотите передать в выражение функции. Лямбда-функция может иметь несколько аргументов в зависимости от ваших задач.
  3. expression – это код, который вы хотите выполнить в лямбда-функции

Обратите внимание, что анонимная функция не имеет ключевого слова return. Это связано с тем, что анонимная функция сама автоматически возвращает результат выполнения выражения внутри себя.

Давайте рассмотрим пример лямбда-функции, чтобы понять, как она работает. Мы сравним ее с обычной пользовательской функцией.

Предположим, я хочу написать функцию, которая возвращает в два раза большее число, чем я ей передаю. Мы можем определить пользовательскую функцию следующим образом:

def f(x):
  return x * 2

f(3)
>> 6

Теперь о лямбда-функции. Она создаётся вот так:

lambda x: x * 3

Как я уже объяснял выше, у лямбда-функции нет ключевого слова return. В результате она сама вернет результат выражения. Символ x в ней служит для обозначения значения, которое будет передано в выражение. Вы можете изменить его на любое другое.

Для того, чтобы вызвать лямбда-функцию, используйте подход, известный как немедленный вызов функции. Это выглядит следующим образом:

(lambda x : x * 2)(3)

>> 6

Причина этого в том, что, поскольку у лямбда-функции нет имени, по которому её можно вызвать (она анонимна), то для  вызова нужно указать в скобках весь ее код. 

Когда следует использовать лямбда-функции?

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

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

Распространенные случаи использования лямбда-функций

Итерируемые объекты

Итерируемые объекты – это, по сути, все, что состоит из серии значений, таких как символы или числа.

В Python к итерируемым объектам относятся строки, списки, словари, диапазоны, кортежи и так далее. При работе с ними можно использовать лямбда-функции в сочетании с двумя распространенными функциями: filter() и map().

filter()

Когда вы хотите сосредоточиться на определенных значениях в итерируемом объекте, вы можете использовать функцию filter(). Ниже приведен её синтаксис:

filter(function, iterable)

Как видите, в функцию filter() передается другая функция, содержащая выражение или операции, которые будут выполняться над итерируемой переменной.

Например, у меня есть список [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Теперь допустим, что меня интересуют только те значения в этом списке, которые при делении на 2 дают остаток 0. Я могу использовать filter() и лямбда-функцию.

Сначала я воспользуюсь лямбда-функцией для создания выражения, которое хочу вывести, вот так:

lambda x: x % 2 == 0

Затем я вставлю его в функцию filter() следующим образом:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter(lambda x: x % 2 == 0, list1)

>> <filter at 0x1e3f212ad60> # Результатом будет объект filter, и нам нужно преобразовать его в list, поэтому:

list(filter(lambda x: x % 2 == 0, list1))
>> [2, 4, 6, 8, 10]

map()

Используйте функцию map() тогда, когда хотите изменить каждое значение в итерируемом объекте.

map(function, iterable)

Например, я хочу возвести все значения в приведенном ниже списке в квадрат. Я могу легко сделать это с помощью лямбда-функции и функции map() следующим образом:

list1 = [2, 3, 4, 5]

list(map(lambda x: pow(x, 2), list1))
>> [4, 9, 16, 25]

Pandas Series

Еще одна область применения лямбда-функций – это обработка данных  при создании фрейма в Pandas. Серия (series) – это столбец фрейма данных. Вы можете обращаться ко всем  значениями в серии с помощью лямбда-функции.

Например, у меня есть датафрейм, и я хочу преобразовать значения в столбце name в нижний регистр. Это можно сделать с помощью функции Pandas apply() и лямбда-функции Python следующим образом:

import pandas as pd

df = pd.DataFrame(
    {"name": ["IBRAHIM", "SEGUN", "YUSUF", "DARE", "BOLA", "SOKUNBI"],
     "score": [50, 32, 45, 45, 23, 45]
    }
)
df["lower_name"] = df["name"].apply(lambda x: x.lower())

Функция apply() применит лямбда-функцию к каждому элементу серии. Затем лямбда-функция вернет значение для каждого элемента на основе выражения, которое вы ей передали. В нашем случае выражением было преобразование каждого элемента в нижний регистр.

Заключение

В этой статье мы разобрали, что собой представляют лямбда-функции в Python и как их обычно применяют. Спасибо за внимание и успешного кодинга!

Перевод статьи Ibrahim Abayomi Ogunbiyi “How the Python Lambda Function Works – Explained with Examples”.

1 комментарий к “Лямбда-функции в Python – объяснение с примерами”

  1. Пингбэк: Mapping списков, словарей и кортежей в Python

Комментарии закрыты.