Руководство для начинающих по пониманию лямбда-функций Python

Лямбды в Python — одна из самых полезных, важных и интересных функций, о которых нужно знать. К сожалению, их также легко неправильно понять и ошибиться.

В этой статье мы собираюсь объяснить все, что вам нужно знать об этих загадочных функциях, как их использовать и почему они полезны.

Прежде чем погрузиться в эти практические примеры, вы можете настроить виртуальную среду Python. Если вы даже не хотите этого делать, вам следует хотя бы попробовать эти примеры с интерактивной онлайн-оболочкой Python.

Что такое лямбда в Python?

Лямбда — это просто способ определить функция в Python. Иногда их называют «лямбда-операторами» или «лямбда-функциями».

Если вы раньше использовали Python, вы, вероятно, определили свои функции с помощью ключевого слова def , и до сих пор он работал у вас нормально. Так почему есть другой способ сделать то же самое?

Разница в том, что лямбда-функции анонимны. Это означает, что они не нуждаются в именовании. Они используются для создания небольших одноразовых функций в тех случаях, когда «настоящая» функция была бы слишком большой и громоздкой.

Лямбда-выражения возвращают объект функции, который может быть назначен переменной. Лямбды могут иметь любое количество аргументов, но они могут иметь только одно выражение. Вы не можете вызывать другие функции внутри лямбда-выражений.

Чаще всего лямбда-функции используются в коде, который требует простой однострочной функции, где было бы излишним писать полную нормальную функцию. Более подробно это описано ниже в разделе «Как насчет сопоставления, фильтрации и уменьшения?».

Как использовать лямбды в Python

Прежде чем рассматривать лямбда-функцию, давайте посмотрим на супер-базовую функцию, определенную «традиционным» способом:

  def add_five (number): 
return number + 5

print(add_five(number=4))

Это очень простая функция, но она служит для иллюстрации лямбда-выражений. Ваш может быть более сложным, чем это. Эта функция добавляет пять к любому числу, переданному ей с помощью параметра number ..

Вот как это выглядит как лямбда-функция:

   add_five = лямбда-число: число + 5 

print(add_five(number=4))

Вместо использования def используется слово lambda . Скобки не требуются, но любые слова, следующие за ключевым словом lambda , создаются как параметры. Двоеточие используется для разделения параметров и выражения. В этом случае выражение — число + 5 .

Нет необходимости использовать ключевое слово return — лямбда сделает это за вас автоматически.

Вот как можно создать лямбда-функцию с двумя аргументами:

  add_numbers_and_five = лямбда-число1, число2: число1 + число2 + 5 

print (add_numbers_and_five (number1 = 4, number2 = 3))

Если вы все еще не уверены в сути лямбда-выражений, следующий раздел поможет вам увидеть свет.

Лямбды Python с отображением, фильтром и уменьшением

В базовой библиотеке Python есть три метода: map , reduce и filter . Эти методы, возможно, являются лучшими причинами использования лямбда-функций.

Функция map принимает два аргумента: функцию и список. Он берет эту функцию и применяет ее к каждому элементу в списке, возвращая список измененных элементов как объект карты. Функция list используется для повторного преобразования результирующего объекта карты обратно в список.

Вот как использовать карту без лямбда:

  list1 = [2, 4, 6, 8] 
print ( list1)
def add_five (number):
return number + 5

new_list = list (map (add_five, list1))
print ( new_list)

Эта функция карты довольно удобна удобно, но могло быть и лучше. функция add_five передается в качестве аргумента, но что, если вы не хотите создавать функцию каждый раз, когда используете карту? Вместо этого вы можете использовать лямбду!

Вот как выглядит тот же код, только с заменой функции на лямбда:

  list1 = [2, 4, 6, 8  ] 
print (list1)

new_list = list (map (lambda x: x + 5, list1))
print (new_list)

Как видите, вся функция add_five больше не требуется. Вместо этого используется лямбда-функция, чтобы все было в порядке..

С функцией filter процесс почти такой же. Filter принимает функцию и применяет ее к каждому элементу в списке и создает новый список только с элементами, которые заставили функцию вернуть значение True.

Во-первых, без лямбда-выражений:

  numbers = [1, 4, 5, 10, 20, 30] 
print ( числа)
def better_than_ten_func (число):
if number> 10:
return True
else:
return False
new_numbers = список (фильтр (больше_тем_день_функции, числа))

print(new_numbers)

В этом коде нет ничего плохого, но он становится слишком длинным. Давайте посмотрим, сколько строк может удалить лямбда:

  numbers = [1, 4, 5, 10, 20, 30] 
print (numbers)
new_numbers = list (filter (lambda x: x> 10, numbers))
print (new_numbers)

Лямбда-функция заменила необходимость для всего better_than_ten_func ! И это в пяти простых словах. Вот почему лямбды являются мощными: они уменьшают беспорядок при выполнении простых задач.

Наконец, давайте посмотрим на reduce . Reduce — еще одна интересная функция Python. Он применяет скользящий расчет ко всем элементам в списке. Вы можете использовать это для подсчета общей суммы или умножения всех чисел вместе:

  из functools import reduce 
numbers = [10, 20, 30, 40 ]
print (числа)
def summer (a, b):
return a + b

result = reduce (лето, числа)
print(result)

В этом примере необходимо импортировать reduce из модуля functools , но не волнуйтесь, модуль functools является частью основной библиотеки Python.

То же самое и с лямбдой, функция не нужна:

  from functools import reduce 
числа = [10, 20, 30, 40]
print (числа)

результат = уменьшить (лямбда a, b: a + b, числа)
print (результат)

На что следует обратить внимание при использовании лямбда-выражений Python

Эти примеры показали, насколько просты лямбда-функции, наряду с отображением, фильтром и сокращением, из базовой библиотеки Python. Тем не менее в некоторых случаях лямбда-функции не помогают.

Если вы делаете что-то большее, чем простая задача, или хотите вызвать другие методы, используйте обычную функцию. Лямбды отлично подходят для одноразовых анонимных функций, но они должны иметь только одно выражение.. Если ваша лямбда начинает выглядеть как регулярное выражение, то, вероятно, пришло время провести рефакторинг до специального метода.

Дополнительные советы см. в нашем руководстве по объектно-ориентированному программированию на Python и в нашем руководстве часто задаваемых вопросов для начинающих Python.

Оцените статью
oilgasindustry.ru
Добавить комментарий