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