Найти в Дзене
Удалёнка

Лямбда-функции в Python: примеры

Лямбда-функции – это анонимные функции, которые содержат только одно выражение. Вы можете подумать, что лямбда-функции – это что-то сложное, доступное только продвинутым программистам. Но из этой статьи вы узнаете, как легко начать использовать их в своём коде. В Python мы обычно создаём функции так: def my_func(a): # Тело функции Они объявляются при помощи ключевого слова def, им можно давать название, добавлять список аргументов в скобках. В теле функции может быть много строчек кода, с любым количеством выражений. Но иногда вам может понадобиться функция с одним-единственным выражением внутри. Например, функция, удваивающая аргумент: def double(x): return x*2 Такую функцию, например, можно использовать в методе map. def double(x): return x*2 my_list = [1, 2, 3, 4, 5, 6] new_list = list(map(double, my_list)) print(new_list) # [2, 4, 6, 8, 10, 12] Именно здесь целесообразно использовать лямбда-функцию, т.к. её можно создать прямо в том же месте, где она используется. А это означает ме
Оглавление

Лямбда-функции – это анонимные функции, которые содержат только одно выражение.

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

В Python мы обычно создаём функции так:

def my_func(a):

# Тело функции

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

Например, функция, удваивающая аргумент:

def double(x):

return x*2

Такую функцию, например, можно использовать в методе map.

def double(x):

return x*2

my_list = [1, 2, 3, 4, 5, 6]

new_list = list(map(double, my_list))

print(new_list) # [2, 4, 6, 8, 10, 12]

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

Как использовать лямбда-функции в Python

Как вы уже поняли, лямбды применяются там, где нужна маленькая функция на короткое время – например, в функциях высшего порядка, таких как map или filter.

Синтаксис лямбда-функции имеют следующий:

lambda args: expression

Сперва пишется слово lambda, затем идет одинарный пробел, за ним — список аргументов через запятую, следом – двоеточие и само выражение, являющееся телом функции.

Обратите внимание, что лямбда-функциям нельзя дать имя, потому что они анонимные (без имени) по определению.

Аргументов в них может быть сколько угодно, но выражение в теле обязательно одно.

Пример 1

Можно написать лямбду, которая удваивает свой аргумент: lambda x: x*2, и использовать её в функции map, чтобы удвоить все элементы в списке:

my_list = [1, 2, 3, 4, 5, 6]

new_list = list(map(lambda x: x*2, my_list))

print(new_list) # [2, 4, 6, 8, 10, 12]

Заметьте разницу между этим кодом и функцией double, которую мы написали выше: лямбда гораздо компактнее.

Пример 2

А ещё можно создать лямбда-функцию, которая ищет числа больше нуля: lambda x: x > 0 и использовать в filter, чтобы создать список исключительно положительных чисел.

my_list = [18, -3, 5, 0, -1, 12]

new_list = list(filter(lambda x: x > 0, my_list))

print(new_list) # [18, 5, 12]

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

Пример 3

Лямбда также может быть возвращаемым значением другой функции.

Если вам потребуется создать несколько функций, умножающих числа (например, удваивающих и утраивающих), лямбда может помочь.

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

def muliplyBy (n):

return lambda x: x*n

double = multiplyBy(2)

triple = muliplyBy(3)

times10 = multiplyBy(10)

Лямбда-функция принимает значение n из функции multiplyBy. Таким образом, в double параметр n равен 2, в triple — 3, а в times10 – 10. Теперь при вызове полученных функций с определённым аргументом будет производиться умножение на соответствующее число.

double(6)

> 12

triple(5)

> 15

times10(12)

> 120

Без лямбды вам бы пришлось определять внутри multiplyBy другие функции:

def muliplyBy (x):

def temp (n):

return x*n

return temp

Лямбда-функция занимает всего полстроки и увеличивает читабельность кода.

Заключение

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