Функция lambda в Python

Функции lambda в Python

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

Введение

Если вы знакомы с Javascript, то lambda функции не должны казаться слишком сложными, за исключением некоторых ключевых различий. Так же lambda функции называют анонимными. Функция lambda в Python может иметь только одно выражение в своем теле в отличие от анонимных функций на Javascript.

Использование

Лучший способ объяснить lambda функции — на примерах. Допустим, у нас есть функция, которая возвращает квадрат числа, переданного через аргумент функции.

def square(num):
    return num * num


result = square(2)

print(result)

Вывод программы

4

Приведенный выше фрагмент кода можно переписать, используя анонимную функцию

square = lambda num: num * num
result = square(2)
print(result)

Вывод программы

4

Обратите внимание, что вам не нужно включать оператор возврата в функцию лямбда.

Выражение самое неявно возвращается.

Вы также можете передавать лямбда функции в качестве аргументов в другую функцию.

Например, давайте создадим функцию карты, которая будет иметь следующие спецификации:

  • Принимает список и функцию в качестве аргументов
  • Выполняет функцию с каждым элементом в списке и сохраняет возвращаемое значение в другом списке.
  • Возвращает список, содержащий возвращаемое значение в качестве результата работы функции.
def square(num):
    return num * num


def map(num_list, func):
    ret_list = []
    for num in num_list:
        ret = func(num)
        ret_list.append(ret)
    return ret_list


numbers = [2, 4, 6, 8]
result = map(numbers, square)

print(result)

Вывод программы

[4, 16, 36, 64]

Мы можем сделать приведенный выше фрагмент кода короче, используя лямбда функции. Вы можете передать аргумент функции func в функцию map, не объявляя его, как показано ниже:

def map(num_list, func):
    ret_list = []
    for num in num_list:
        ret = func(num)
        ret_list.append(ret)
    return ret_list

numbers = [2,4,6,8]
result = map(numbers, lambda square: num * num)

print(result)

Вывод программы

[4, 16, 36, 64]

Как видно из приведенного выше фрагмента кода, мы достигли того же результата с анонимной функцией, при этом нам пришлось писать меньший код.

Рассмотрим другой пример. Напишем программу, которая берет список студенческих записей и упорядочивает их по определенным критериям. Запись об ученике содержит имя ученика, его возраст и оценку. Для этого мы воспользуемся встроенной сортировочной функцией Python.

records = [
    {"name": "Андрей", "age": 20, "score": 90},
    {"name": "Игорь", "age": 16, "score": 75},
    {"name": "Артем", "age": 23, "score": 99},
]

score_sorted_records = sorted(records, key=lambda record: record["score"])
print(score_sorted_records)

[
    {"name": "Игорь", "age": 16, "score": 75},
    {"name": "Андрей", "age": 20, "score": 90},
    {"name": "Артем", "age": 23, "score": 99},
]

age_sorted_records = sorted(records, reverse=True, key=lambda record: record["age"])
print(age_sorted_records)

[
    {"name": "Артем", "age": 23, "score": 99},
    {"name": "Андрей", "age": 20, "score": 90},
    {"name": "Игорь", "age": 16, "score": 75},
]

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

Вывод

Функции lambda — это способ написания анонимных функций малого размера. Они могут быть применены во многих случаях использования. Они могут принимать любое количество аргументов, но могут иметь только одно выражение. Они могут присваиваться переменным или передаваться непосредственно в качестве аргументов функции. Они обычно используются при работе с функциями, которые принимают функции в качестве аргументов.

Я надеюсь, что эта статья была полезна для того, чтобы познакомить вас с тем, как работают функции lambda и как правильно их использовать.

Егор Егоров

Программирую на Python с 2017 года. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без непрерывного цикла обучения, спорта и чувства юмора.

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Иван Гусев

    Бро, я тебя от души благодарю за эту классную информацию. Я плохо разбераюсь в этой сфере, но ты всё подробно объяснил всего-то в одной статье. Мне всегда было интересно узнать как можно какой-то объект сделать короче или например, что вообще из себя представляет функции lambda. И с помощью твоего текста я всё это теперь понимаю и умею делать.

    Ответить
    1. Егор Егоров автор

      это очень здорово Иван!

      Ответить