Использование анонимных функций (lambda)

В 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 особенно полезны, когда передаются в другие функции или применяются в условиях, циклах и вложенных выражениях.

Перейти к следующему шагу

Комментарии