Лямбда-функции в 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

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

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

lambda args: expression

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

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

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

[python_ad_block]

Пример 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

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

Заключение

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

Перевод статьи Lambda Function in Python – Example Syntax.

Прокрутить вверх