Python – один из самых интуитивно понятных языков программирования. Тем не менее, некоторые вещи могут быть сложными для понимания и осмысления. Лямбда-функции – одно из них.
Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU
Я через это прошёл. Когда я только начинал изучать Python, я пропустил лямбда-функцию, потому что она была мне непонятна. Но со временем я начал её понимать. Так что не волнуйтесь – если вы тоже испытываете трудности, я помогу вам разобраться.
В этом уроке вы узнаете, что такое лямбда-функция и когда ее использовать. Также мы рассмотрим несколько распространенных случаев применения лямбда-функции. Итак, давайте приступим.
Что такое лямбда-функции?
Лямбда-функции похожи на обычные пользовательские функции, только у них нет имени. Их обычно называют анонимными функциями. Они удобны, когда вы хотите создать функцию, содержащую только простые выражения – то есть выражения, которые обычно состоят из одной строки с инструкцией. Они также полезны, когда вы хотите использовать функцию только один раз.
Как определить лямбда-функцию?
Вы можете определить лямбда-функцию следующим образом:
lambda argument(s): expression
lambda
– ключевое слово в Python для определения анонимной функции.argument(s)
– это переменная для хранения значения, которое вы хотите передать в выражение функции. Лямбда-функция может иметь несколько аргументов в зависимости от ваших задач.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”.
Пингбэк: Mapping списков, словарей и кортежей в Python