Несколько дней назад я проводил лекцию для студентов инженерного колледжа, посвященную введению в Python, объясняющую lambda
функцию в Python. В тот раз я застрял, объясняя детали, поскольку я также знаю, что не являюсь экспертом в lambda
использовании в Python. Но я подумал, что сейчас подходящее время, чтобы узнать подробности и поделиться своими знаниями с разработчиками, которые находятся в таком же состоянии, как и я.
Давайте разберемся, что выиграет от этой статьи:
- Подробное понимание Lambda
- как использовать вместе с примером
Что такое лямбда в Python?
Лямбда-функция в Python - это анонимная функция или функция, не имеющая имени. Это в основном однострочная и ограниченная функция. Как и обычная функция, лямбда-функция может иметь несколько аргументов с одним выражением.
Создание лямбда-функции:
Например :
lamba arguments(a,b,…n): expression
- В общем виде в Python
def sum(a,b): return a+b print(sum(2,3))
Output : >>> 5
- Использование лямбда в Python
sum = lambda a,b: a+b
print(sum(2,3))
Output : >>> 5
В приведенном выше коде sum = lambda a,b: a+b
- это лямбда-функция. a
и b
- переменные - это аргумент, а a+b
- это выражение, которое выполняется, и результат выражения возвращается без синтаксиса возврата. Выражение получает добавление входных параметров. Предоставление 2,3
в качестве параметров, которые добавлены 2 и 3. Можно увидеть, как в общем может быть написана одна и та же логика и при использовании лямбда с точки зрения строк кода и исполнения.
Но строки кода - единственная причина использовать Lambda в Python? Есть ли причина ? Ответ - большой ДА.
Лямбда-функции используются, когда вам нужна функция на короткий период времени. Это используется, когда вы хотите передать функцию в качестве аргумента функциям высшего порядка, то есть функциям, которые принимают другие функции в качестве своих аргументов.
Функция высшего порядка - это функция, которая принимает функцию в качестве аргумента или возвращает функцию. Функция высшего порядка отличается от функций первого порядка, которые не принимают функцию в качестве аргумента и не возвращают функцию в качестве вывода.
map
,filter
иreduce
- функции высшего порядка. Лямбда отлично работает как параметр для функций более высокого порядка, если вы используете ее с ограничениями
Возможно, вы заметили, что в определении лямбд аргументы не заключаются в круглые скобки. Функции с несколькими аргументами (функции, которые принимают более одного аргумента) выражаются в лямбдах Python путем перечисления аргументов и разделения их запятой (,), но без заключения в круглые скобки.
- Другой способ вызвать функцию Lambda - анонимно без назначения переменной и передачи аргументов:
(lambda x, y: x + y)(2, 3)
Пример,
def square(a):
return (lambda x: x*x)(a)
print(square(2))
- Еще один пример вычисления квадрата для всех элементов списка:
def square(x): return lambda : x*x functions = [square(i) for i in [1,2,3,4,5,6]] for function in functions: print(function())
Output: 1 4 9 16 25
- Существует еще одна концепция, называемая каррированием, которая означает, что функции выполняют любое количество вычислений и данных в единую реальную функцию, которая возвращает ожидаемый результат. Вот как я могу преобразовать приведенный выше пример вычисления квадрата с помощью каррирования.
functions = [lambda i=i: i*i for i in range(1, 6)]
for function in functions:
print(function())
В этом примере каррирования i=i
- позиционный аргумент. Если вы назначите i=1
, весь вывод станет 1
. Здесь мы присваиваем i
переменной i
из выражения итерации for i in range(1,6)
. Как вы можете видеть, мы передаем аргумент не из function()
, а в лямбда-объявлении на момент назначения значения с помощью i=i
.
Другой пример позиционного аргумента:
В этом примере z
значение по умолчанию - 3. при передаче аргументов нельзя изменить положение 1-го и 2-го аргумента. Во-первых, аргумент не по умолчанию не должен следовать за аргументом по умолчанию означает, что вы можете использовать его как (lambda x=2, y, z: x + y + z)(1, 2)
, он вызовет ошибку, как показано ниже:
File "main.py", line 1 print((lambda x=2, y, z: x + y + z)(1, 2)) ^ SyntaxError: non-default argument follows default argument
Это может быть так print((lambda x, y=2, z=3: x + y + z)(1))
, потому что в этом значении по умолчанию следуют друг за другом.
Заключение Теперь вы все знаете, как использовать лямбда-функции Python, и несколько советов:
- Напишите лямбды Python и используйте анонимные функции
- Выбирайте с умом между лямбдами или обычными функциями Python
- Избегайте чрезмерного использования лямбда-выражений
В этой статье я не рассмотрел полное расширенное использование лямбда, но я попытался усилить понимание основных лямбда вместе с примером. Для получения более подробной информации ниже можно использовать ссылки.
Если вам потребуется помощь по этой статье или более глубокое понимание Lambda, обратитесь к моему обработчику твиттера @ aviboy2006.
Ссылки:
- Stackabuse.com/lambda-functions-in-python
- Realpython.com/python-lambda
- Geeksforgeeks.org/currying-function-in-python
Первоначально опубликовано на https://www.internetkatta.com.