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

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

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





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





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





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

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

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



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

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





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

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

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





def add_five(number):
return number + 5

print(add_five(number=4))

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

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

add_five = lambda number: number + 5

print(add_five(number=4))

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

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

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

что такое портретный режим на iphone 7
add_numbers_and_five = lambda number1, number2: number1 + number2 + 5

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

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

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

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

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

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

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 функция больше не требуется. Вместо этого для аккуратности используется лямбда-функция.

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

Во-первых, без лямбд:

numbers = [1, 4, 5, 10, 20, 30]
print(numbers)
def greater_than_ten_func(number):
if number > 10:
return True
else:
return False
new_numbers = list(filter(greater_than_ten_func, 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)

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

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

from functools import reduce
numbers = [10, 20, 30, 40]
print(numbers)
def summer(a, b):
return a + b

result = reduce(summer, numbers)
print(result)

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

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

from functools import reduce
numbers = [10, 20, 30, 40]
print(numbers)

result = reduce(lambda a, b: a + b, numbers)
print(result)

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

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

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

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

Делиться Делиться Твитнуть Эл. адрес 3 способа проверить, является ли электронное письмо настоящим или поддельным

Если вы получили письмо, которое выглядит немного сомнительным, всегда лучше проверить его подлинность. Вот три способа узнать, настоящее ли электронное письмо.

Читать далее
Похожие темы
  • Программирование
  • Python
  • Учебники по кодированию
Об авторе Джо Кобурн(136 опубликованных статей)

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

Ещё от Joe Coburn

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться