Программа курса:
Использование анонимных функций (lambda)
.jpg)
В Python помимо обычных функций существуют анонимные функции, которые создаются с помощью ключевого слова lambda
. Такие функции не требуют имени и обычно используются для выполнения простых операций в тех местах, где полноценная функция была бы излишней. В этой лекции мы рассмотрим, как и когда использовать lambda
, с подробными примерами.
В Python анонимные функции создаются с помощью ключевого слова lambda
. В отличие от обычных функций, которые определяются с помощью def
и могут иметь имя, lambda
функции не имеют имени и предназначены для выполнения простых операций в одну строку.
Основной синтаксис для создания анонимной функции с помощью lambda
:
lambda аргументы: выражение
Где:
- аргументы — это входные данные функции (как и у обычной функции),
- выражение — то, что функция возвращает.
Lambda-функции полезны там, где нужно написать небольшую функцию на месте и нет необходимости давать ей имя.
Пример 1: Простейшая lambda-функция
Допустим, вам нужно создать функцию, которая добавляет 10 к числу:
add_ten = lambda x: x + 10
print(add_ten(5)) # 15
Пояснение:
- В данном примере
lambda x: x + 10
создает функцию, которая принимает один аргументx
и возвращает результат выраженияx + 10
. - Функцию
lambda
присваиваем переменнойadd_ten
, так что теперь при вызовеadd_ten(5)
она вернет5 + 10 = 15
.
Пример 2: Lambda-функция с несколькими аргументами
Lambda может принимать несколько аргументов. Рассмотрим пример, где нужно умножить два числа:
multiply = lambda a, b: a * b
print(multiply(3, 4)) # 12
Пояснение:
- Здесь
lambda a, b: a * b
создает функцию с двумя аргументамиa
иb
. - Внутри функции выполняется операция умножения:
a * b
. - При вызове
multiply(3, 4)
возвращается результат умножения 3 на 4, то есть 12.
Пример 3: Lambda-функция без аргументов
Lambda может вообще не принимать аргументов. Например, можно создать функцию, которая всегда возвращает одно и то же значение:
constant = lambda: 42
print(constant()) # 42
Пояснение:
- Здесь
lambda: 42
создает функцию, которая всегда возвращает число 42. - В этом примере функция не принимает никаких аргументов, поэтому при вызове
constant()
мы просто получаем 42.
Пример 4: Использование lambda внутри другой функции
Иногда удобно использовать lambda-функции как внутренние функции. Например, когда вам нужно передать простую операцию в другую функцию:
def apply_function(func, value):
return func(value)
double = lambda x: x * 2
print(apply_function(double, 5)) # 10
Пояснение:
- Функция
apply_function
принимает на вход функцию и значение, на которое нужно применить эту функцию. - Мы создали
lambda x: x * 2
, которая удваивает значение, и передали ее как аргумент вapply_function
. - В результате, при вызове
apply_function(double, 5)
происходит удвоение значения 5, и выводится результат 10.
Пример 5: Lambda внутри условных выражений
Lambda-функции также могут быть полезны в комбинации с условными выражениями. Например, чтобы сделать простую функцию, которая проверяет четность числа:
is_even = lambda x: "Четное" if x % 2 == 0 else "Нечетное"
print(is_even(4)) # Четное
Пояснение:
- Здесь используется тернарный оператор внутри
lambda
функции. Если число делится на 2 без остатка (x % 2 == 0
), возвращается строка"Четное"
. Иначе возвращается"Нечетное"
. - В результате вызова
is_even(4)
мы получаем "Четное", а приis_even(7)
— "Нечетное".
Пример 6: Lambda-функция как возвращаемое значение другой функции
Иногда можно вернуть анонимную функцию из другой функции:
def power_function(n):
return lambda x: x ** n
square = power_function(2)
cube = power_function(3)
print(square(4)) # 16
print(cube(2)) # 8
Пояснение:
- Функция
power_function
принимает числоn
и возвращаетlambda x: x ** n
. Это создает функцию, которая возводит числоx
в степеньn
. - Переменной
square
присваивается функция для возведения в квадрат, а переменнойcube
— для возведения в куб. - Теперь при вызове
square(4)
возвращается4 ** 2 = 16
, а при вызовеcube(2)
—2 ** 3 = 8
.
Пример 7: Lambda для работы с вложенными функциями
Lambda-функции могут быть использованы для создания более сложных функциональных конструкций, таких как вложенные функции:
nested = lambda x: (lambda y: y + 1)(x) * x
print(nested(3)) # 12
Пояснение:
- Здесь мы видим, что
lambda x
создает основную функцию, которая затем внутри себя вызывает другую lambda-функциюlambda y: y + 1
с аргументомx
. - То есть сначала выполняется
y + 1
, что равно 4 (приx = 3
), а затем результат умножается наx
, и возвращается 12.
Пример 8: Lambda с логическими выражениями
Lambda-функции также могут работать с логическими операциями. Например, проверка, находится ли число в заданном диапазоне:
in_range = lambda x: 10 <= x <= 20
print(in_range(15)) # True
print(in_range(25)) # False
Пояснение:
- Здесь
lambda x: 10 <= x <= 20
возвращаетTrue
, еслиx
находится в диапазоне от 10 до 20 включительно, иFalse
в противном случае. При вызове
in_range(15)
результатом будетTrue
, так как 15 лежит в диапазоне. А приin_range(25)
результатом будетFalse
, так как 25 вне диапазона.
Эта таблица обобщает ограничения рекурсии и методы их оптимизации, чтобы помочь лучше понять, как можно справляться с проблемами, связанными с рекурсией.
Lambda-функции являются мощным инструментом для создания кратких и эффективных функций. Они используются в местах, где необходима быстрая обработка данных без необходимости создания полноценных именованных функций. Lambda особенно полезны, когда передаются в другие функции или применяются в условиях, циклах и вложенных выражениях.