Понимание lambda-функций в Python с примерами
Как известно, мы используем функции для автоматизации процессов в программном обеспечении.
Lambda-функции на самом деле просто известны как анонимные функции. Таким образом, принимая любое количество аргументов, мы получаем в результате выражение.
По сути, lambda-функция, которая принимает параметр x и возвращает его, выглядит так:
func = lambda x : x
Обратите внимание, как мы используем здесь ключевое слово lambda. И это по сути та же самая ситуация, когда функция, определенная в python, просто возвращает себя:
def func(x):
return x
А теперь давайте приведем еще один пример того, какие другие варианты использования lambda могут быть в одной и той же строке в быстрой последовательности:
print((lambda x: x + 10)(90))
output:
100
Как и выше, мы можем вернуть функцию, просто набрав lambda, и фактически мы можем повторно использовать ее, определив ее как другую функцию.
Например, мы можем попробовать это в простой математической операции со следующими аргументами и двумя отдельными переменными:
function = lambda x, y: x ** y
print(function(2, 3))
output: 8
Почему я должен использовать lambdas?
Потому что структура lambda-функций позволяет легко использовать вашу анонимно определенную функцию в другом месте. В качестве параметра вы указываете, с чем будет обрабатываться отправленное значение, или за какими процессами оно будет следовать, и создадите вывод, таким образом, как родительскую или высокую функцию. Это приводит к тому, что у нас есть структура, которая делает ее гибкой на практике.
Например, давайте определим функцию, которая возвращает, будет ли каждое отправленное нами значение четным или нечетным числом:
def myfunc(n):
return lambda a : a % n
evenOrOddNumber = myfunc(2)
if evenOrOddNumber(101) == 0:
print(f"This number is even")
else:
print(f"This number is odd")
Иногда мы можем использовать одну и ту же lambda-функцию по-другому. Например, давайте определим второй случай, когда число — умножается. И в этом случае давайте посмотрим результат отрицательного числа или положительного:
def myfunc(n):
return lambda a : a * n
evenOrOddResult = myfunc(2)
positiveOrNegativeNumber = myfunc(1)
if evenOrOddResult(101):
print(f"The result is even")
else:
print(f"The result is odd")
if positiveOrNegativeNumber(-101) < 0:
print(f"This number is negative")
else:
print(f"This number is positive")
output:
The result is even
This number is negative
Поскольку здесь мы хотим контролировать два отдельных случая, мы определили для функции одну lambda-функцию. И в обоих случаях он возвращал нам результаты отдельно после того, как мы запускали код Python.
Настоящая сила lambda в том, что она может вернуть состояние в однострочном выражении. Таким образом, чтобы проверить условие нечетного или четного числа, мы могли бы просто написать:
print((lambda x: x % 2 and 'this number is odd' or 'this number is even')(30))
output:
this numer is even
Как указано выше, немедленное выполнение функции становится характеристикой lambda-функций, также известных как IIFE.
Вывод
После рассмотрения привилегий Lambda есть вещи, которые требуют от нас большей осторожности. В этом играют роль такие факторы, как масштабируемость проекта, удобочитаемость, максимальное количество участников и ожидаемая производительность от проекта. Это может ограничить использование lambda-выражений в реальном мире.
На что необходимо обратить внимание?
Lambda-функции могут поддерживать не все подфункции. Вместо этого может не иметь смысла устанавливать единую структуру, которая будет связывать разные события друг с другом. В конце концов, программное обеспечение — это командная работа, и необходимо найти наиболее разумный результат, который разгрузит эту команду.
Когда мы определенно стремимся иметь родительскую функцию для подфункций, нам нужно хорошо определить, нужна она нам или нет. В этих случаях может быть проще найти решение с нормальной функцией.
Еще один важный момент заключается в том, что хотя lambda-выражения могут показаться вспомогательными функциями, когда код очень укорочен на первый взгляд, учитывая количество участников, проект может стать трудным и сложным для понимания, когда даже человек, написавший код, оглядывается назад.