Lambda в Python. Все, что нужно знать – синтаксис, аргументы, несколько примеров

Lambda в Python представляет собой простую функцию. При этом она обладает несколько ограниченными возможностями. Для чего нужна Lambda и как она работает – рассмотрим в этой статье.

Lambda – что это

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

x = 5

будет создан объект «int», соответствующий значению 5, а символ «х» указывает на этот объект. Как проверить тип «х» и узнать его адрес? Для этого необходимо воспользоваться встроенными объектами-функциями «id» и «type».

>>> type(x)

<class ‘int’>

>>> id(x)

4308964832

В данном случае символ «х» ссылается на некий объект типа «int». Он находится по адресу, определенному функцией «id». Теперь рассмотрим еще одну функцию:

>>> def f(x):

…      return x * x

…

Еще раз повторим ранее выполненное упражнение и определим тип, а также адрес объекта «f».

>>> def f(x):

…      return x * x

…

>>> type(f)

<class ‘function’>

>>> id(f)

4316798080

Итак, в Python существует класс «function». Вычисленная функция «f» – это экземпляр указанного класса. В предыдущем примере объект «х» – экземпляр класса «integer». Проще говоря, функции – это переменные. Но обычные переменные содержат определенные данные, функции сохраняют код.

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

Итак, рассмотрим подробнее ситуацию передачи функции «f» другой функции.

def f (x):

           return x*x




def modify_list (L, fn):

         for idx, v in enumerate(L);

                   L[idx] = fn(v)




L = [1, 2, 3]

modify_list (L, f)

print (L)




#вывод: [1, 9, 4]

Из приведенного примера следует, что функция «modily_list» принимает функцию «fn» и список «L» как аргументы. Далее она перебирает каждый элемент в списке, применяет к ним функцию. Этот способ позволяет передавать функцию для преобразования. При попытке передать оператору «modily_list» некую функцию «f», в результате мы получим список со значениями в квадрате.

lambda-v-python-vse-chto-nuzhno-znat-sintaksis-argumenty-neskolko-primerov
Так выглядит функция Lambda

Передать таким образом можно любую функцию, способную преобразовать значения каким-либо другим способом. Этот инструмент обладает довольно мощными свойствами. Вот и подошла очередь к разбору лямбды. Параметр лямбда в языке программирования Python – еще один метод определения функции. Как выглядит базовый синтаксис (написание) функции лямбда?

lambda arguments: expression

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

>>> f = lambda x: x * x

>>> type(f)

<class ‘function’>

Лямбда-функция незаменима при выполнении одноразовых функций. Данная функция также имеет другое название – анонимная.

Лямбда с несколькими аргументами

Расчет функции-лямбда с одним аргументов выполняется при помощи такого кода:

>>> f = lambda x: x * x

>>> f(5)

25

При работе с несколькими аргументами, достаточно разделить их запятыми. Например, следует выполнить функцию, в которой 2 аргумента возвращаются к своему произведению

>>> f = lambda x, y: x * y

>>> f(5, 2)

25

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

Lambda-функция без аргументов

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

>>> f = lambda: True

>>> f()

True

Возможность выполнения нескольких лямбда-функций

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

Несколько примеров lambda-функций

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

Lambda-функция и map

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

>>> L = [1, 2, 3, 4]

>>> list (map (lambda x: x**2, L))

[1, 4, 9, 16]

Следует учитывать тот момент, что в разных версиях Пайтон, функция map выполняется по-разному. Так, в Python-2 – это список, в Python-3 данная функция возвращает аргумент Map.

Таким образом, вместо выполнения функции и дальнейшей передачи в map в виде аргумента, используется lambda для выполнения действия внутри функции. Это актуально, если функция map используется в программном коде лишь один раз.

Lambda-функция и filter

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

Когда возвращенное значение соответствует true, то аргумент функции остается. Если это не так – аргумент отклоняется. Рассмотрим пример с определением простой функции со значением «ложь» false для нечетных значений и «правда» true – соответственно, для четных:

def even_fn(x):

  if x % 2 == 0:

    return True

  return False




print(list(filter(even_fn, [1, 3, 2, 5, 20, 21])))




#вывод: [2, 20]

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

print(list(filter(lambda x: x % 2 == 0, [1, 3, 2, 5, 20, 21])))

Так выполняется функция Ламбда в Python.

Сортировка списков через Lambda-функцию

В Пайтон функция под названием «Сортировка списков» относится к категории базовых. При этом, если список состоит из строк или числовых значений, делает процесс максимально простым. Здесь используются такие встроенные функции, как sorted и sort.

lambda-v-python-vse-chto-nuzhno-znat-sintaksis-argumenty-neskolko-primerov
Структура Lambda и Пайтон

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

class Employee:

    def __init__(self, name, age):

        self.name = name

        self.age = age

Сейчас пришла очередь для создания экземпляров класса Employee, которые будут добавлены в список.

Alex = Employee(‘Alex’, 20)

Amanda = Employee(‘Amanda’, 30)

David = Employee(‘David’, 15)

L = [Alex, Amanda, David]

Теперь приступим к сортировке, например на основании параметра Age, то есть возраста. Для этого необходимо прописать такой алгоритм:

L.sort(key=lambda x: x.age)

print([item.name for item in L])

#вывод: [‘David’, ‘Alex’, ‘Amanda’]

Функция Лямбда использована как параметр key («ключ») вместо ее вычисления и дальнейшей передачи в soft-функцию в языке Пайтон.

Инструкции и выражения

Мы уже выяснили, что lambda имеет единственное выражение (expression) в программном теле. Причем, обратите внимание, здесь не имеется в виду инструкция (statement).

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

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

  • 3+5 – аргумент соответствует 8
  • 10>5 – параметр соответствует True
  • True and (5<3) – выражение соответствует False

Тело Lambda является выражением. Это связано с тем, что данное значение будет возвращено. Для дальнейшей работы с лямбдой в Пайтон это обязательно пригодится.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

три × четыре =

ehhu.ru w0o.ru 4-man.ru Adblock
detector