2.1 Определение лямбда-функций
Лямбда-функции, также известные как анонимные функции, представляют собой компактные однострочные функции без имени, которые могут быть созданы с помощью ключевого слова lambda.
В отличие от обычных функций, определяемых с помощью def, лямбда-функции создаются на лету и обычно используются для простых операций, которые выполняются в одной строке.
Синтаксис лямбда-функции состоит из ключевого слова lambda, за которым следуют аргументы, двоеточие и выражение:
lambda аргументы: выражение
Лямбда-функции могут принимать любое количество аргументов, но могут содержать только одно выражение. Значение этого выражения автоматически возвращается.
Примеры:
| Лямбда-функция | Обычная функция |
|---|---|
|
|
|
|
|
|
2.2 Применение лямбда-функций
Лямбда-функции часто используются в сочетании с другими функциями, такими как map(), filter() и sorted(), а также как аргументы для других функций.
Использование с map()
Функция map() применяет заданную функцию к каждому элементу итерируемого объекта и возвращает итератор с результатами. Лямбда-функции отлично подходят для использования с map(), поскольку позволяют лаконично определять функцию для преобразования элементов.
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # Вывод: [1, 4, 9, 16, 25]
Использование с filter()
Функция filter() возвращает итератор, состоящий из элементов итерируемого объекта, для которых заданная функция возвращает True. Лямбда-функции позволяют быстро определять условие для фильтрации.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Вывод: [2, 4, 6, 8, 10]
Использование с sorted()
Функция sorted() сортирует элементы итерируемого объекта. Лямбда-функции могут использоваться для определения пользовательского критерия сортировки с помощью аргумента key.
words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # Вывод: ['date', 'apple', 'banana', 'cherry']
Лямбда-функции в выражениях
Лямбда-функции можно использовать внутри других выражений, таких как списковые выражения и генераторы словарей.
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # Вывод: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
2.3 Ограничения лямбда-функций
Лямбда-функции имеют несколько ограничений по сравнению с обычными функциями:
Ограниченность выражениями:
Лямбда-функции могут содержать только одно выражение и не могут включать в себя сложные операторы, такие как циклы или операторы управления потоком (например, if, else и т.д.).
Отсутствие документации:
Лямбда-функции не могут содержать строку документации (docstring), что затрудняет документирование их функциональности.
Ограниченные возможности отладки:
Из-за отсутствия имени и документации лямбда-функции сложнее отлаживать по сравнению с обычными функциями.
Пример ограничения лямбда-функций
Попытка использовать несколько выражений внутри лямбда-функции приведет к синтаксической ошибке:
# Этот код вызовет ошибку
invalid_lambda = lambda x: x ** 2; print(x)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ