Module (12%)
Section (69%)

Как использовать лямбды и для чего?

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

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

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

Посмотрите на пример в редакторе. Вот как мы реализовали эту идею.

Давайте проанализируем это. Функция printfunction() принимает два параметра:

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

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

f(x) = 2x2 - 4x + 2

Имя функции затем передается в printfunction() вместе с набором из пяти различных аргументов - набор строится с помощью условия понимания списка.

Код печатает следующие строки:

f(-2)=18 f(-1)=8 f(0)=2 f(1)=0 f(2)=2

output

Можно ли избежать определения функции poly(), поскольку мы не собираемся использовать ее более одного раза? Да, можно - это то преимущество, которое может принести лямбда.


Посмотрите на пример ниже. Вы видите разницу?

def print_function(args, fun): for x in args: print('f(', x,')=', fun(x), sep='') print_function([x for x in range(-2, 3)], lambda'[SPACE]'x:'[SPACE]'2'[SPACE]'*'[SPACE]'x**2'[SPACE]'-'[SPACE]'4'[SPACE]'*'[SPACE]'x'[SPACE]'+'[SPACE]'2)

Функция printfunction() осталась прежней, но функции poly()нет. Нам это больше не нужно, поскольку полином теперь находится непосредственно внутри вызова printfunction() в форме лямбды, определенной следующим образом:

lambda x: 2 * x ** 2 - 4 * x + 2

Код стал короче, понятнее и разборчивее.

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



Code

def printfunction(args, fun):
for x in args:
print('f(', x,')=', fun(x), sep='')


def poly(x):
return 2 * x**2 - 4 * x + 2


printfunction([x for x in range(-2, 3)], poly)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×