Лямбда-выражения в языке 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