Функции lambda в Python

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

Введение

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

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

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

def square(num):     
    return num * num 

result = function(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 и как правильно их использовать.

close

Изучаешь Python?

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

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

Поделиться записью в социальных сетях

Добавить комментарий

Ваш адрес email не будет опубликован