Лямбда-выражения в языке Python представляют небольшие анонимные функции, которые определяются с помощью оператора lambda. Формальное определение лямбда-выражения:
lambda [параметры] : инструкция
Определим простейшее лямбда-выражение:
message = lambda: print("hello") message() # hello
Здесь лямбда-выражение присваивается переменной message. Это лямбда-выражение не имеет параметров, ничего не возвращает и просто выводит строку "hello" на консоль. И через переменную message мы можем вызвать это лямбда-выражение как обычную функцию. Фактически оно аналогично следующей функции:
def message(): print("hello")
Если лямбда-выражение имеет параметры, то они определяются после ключевого слова lambda. Если лямбда-выражение возвращает какой-то результат, то он указывается после двоеточия. Например, определим лямбда-выражение, которое возвращает квадрат числа:
square = lambda n: n * n print(square(4)) # 16 print(square(5)) # 25
В данном случае лямбда-выражение принимает один параметр - n. Справа от двоеточия идет возвращаемое значение - n* n
. Это лямбда-выражение
аналогично следующей функции:
def square2(n): return n * n
Аналогичным образом можно создавать лямбда-выражения, которые принимают несколько параметров:
sum = lambda a, b: a + b print(sum(4, 5)) # 9 print(sum(5, 6)) # 11
Хотя лямбда-выражения позволяют немного сократить определения функций, тем не менее они ограничены тем, что они могут выполнять только одно выражение. Однако они могут быть довольно удобны в тех случаях, когда необходимо использовать функцию для передачи в качестве параметра или возвращения в другой функции. Например, передача лямбда-выражения в качестве параметра:
def do_operation(a, b, operation): result = operation(a, b) print(f"result = {result}") do_operation(5, 4, lambda a, b: a + b) # result = 9 do_operation(5, 4, lambda a, b: a * b) # result = 20
В данном случае нам нет необходимости определять функции, чтобы передать их в качестве параметра, как в прошлой статье.
То же самое касается и возвращение лямбда-выражений из функций:
def select_operation(choice): if choice == 1: return lambda a, b: a + b elif choice == 2: return lambda a, b: a - b else: return lambda a, b: a * b operation = select_operation(1) # operation = sum print(operation(10, 6)) # 16 operation = select_operation(2) # operation = subtract print(operation(10, 6)) # 4 operation = select_operation(3) # operation = multiply print(operation(10, 6)) # 60