В Python одна функция может стать аргументом для другой функции. Это полезно во многих случаях.
Давайте создадим функцию калькулятора, имеющего функции сложения, вычитания, умножения или деления вместе с двумя числами в качестве аргументов.
def add(n1, n2):
return n1 + n2
def subtract(n1, n2):
return n1 - n2
def multiply(n1, n2):
return n1 * n2
def divide(n1, n2):
return n1 / n2
def calculator(operation, n1, n2):
return operation(n1, n2) # Используем аргумент 'operation' как функцию
result = calculator(multiply, 10, 20)
print(result)
print(calculator(add, 10, 20))
Python автоматически понимает, что аргумент умножения в строке 21 является функцией, и поэтому все работает отлично.
На прошлом уроке мы обсуждали назначение лямбд. Что ж, теперь пришло их время проявить себя.
Для метода калькулятора нам нужно было написать четыре дополнительные функции, которые можно было бы использовать в качестве аргумента. Это может быть довольно хлопотно.
Почему бы нам просто не передать лямбду в качестве аргумента? Четыре операции довольно просты, поэтому их можно записать в виде лямбда-выражений.
Давай попробуем:
def calculator(operation, n1, n2):
return operation(n1, n2) # Используем аргумент 'operation' как функцию
# 10 и 20 - это аргументы.
result = calculator(lambda n1, n2: n1 * n2, 10, 20)
print(result)
print(calculator(lambda n1, n2: n1 + n2, 10, 20))
Теперь код выглядит намного короче! Мы можем определить операцию на ходу, когда захотим.
В этом прелесть лямбд. Они очень хорошо работают в качестве аргументов для других функций