Python: lambda и анонимные функции

Lambda функции существуют во многих языках программирования, в том числе они поддерживаются и в Python.

По сути это такие функции, у которых нет имени (анонимные функции), но тем не менее она может быть присвоена переменной.

# определение lambda функции
value = lambda [аргументы] : выражение

# вызов lambda функции
value(N)

Lambda функция может принимать один или несколько аргументов либо ни одного:

# lambda функция welcome не содержит аргументов
welcome = lambda : print('Welcome!')
welcome()

# lambda функция square, которая возводит число в квадрат (передан 1 аргумент "x")
square = lambda x : x ** 2
print(square(3)) # out: 9

# lambda функция welcome, которая выводит приветствие (передан 1 аргумент "user")
welcome = lambda user: print(f'Привет, {user}!')
welcome('Сергей') # out: "Привет, Сергей!"

# lambda функция get_sum, которая суммирует все переданные в нее аргументы (переданы 3 аргумента: a, b, c)
get_sum = lambda a, b, c : a * b * c
get_sum(3, 5, 7)

Объявление и вычисление lambda функции в одно действие (без присваивания переменной):

# для переданного числа 10 возводит его в куб
(lambda x: x**3)(10)  # out: 1000

Используя map можно для каждого элемента списка вычислить lambda функцию:

# для каждого элемента из array вычисляем квадрат и помещаем его в список square_list
array = [2, 3, 5, 6, 9]
square_list = list(map(lambda x: x**2, array))
print(square_list) # out: [4, 9, 25, 36, 81]

# тоже самое можно сделать и так, без использования lambda
square_list = [x**2 for x in array]
print(square_list) # out: [4, 9, 25, 36, 81]

Используя pandas, в датафрейме можно получить новое свойство (столбец) путем lambda вычисления, передав в аргументы существующие свойства:

import pandas as pd

df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
df['C'] = df.apply(lambda i: i['A']*i['B'], axis=1)

# ВЫВОД:

  A B C
0 4 9 36
1 4 9 36
2 4 9 36

Также можно использовать условные операторы в lambda функции, например, предотвращаем деление на ноль:

df['C'] = df.apply(lambda i: i['A'] / i['B'] if i['B'] > 0 else 0, axis=1)

 

Рейтинг
( 56 оценок, среднее 2.66 из 5 )
Понравилась статья? Поделиться с друзьями: