lambda, map и filter в Python
Разберем как пользоваться lambda функциями в Python и как применять их при фильтрации и обходе по спискам
lambda
лямбда-оператор или лямбда-функция используются для создания небольших, одноразовых и анонимных объектов функции в Python.
Базовый синтаксис:
lambda arguments : expression
lambda-оператор может иметь любое количество аргументов, но может иметь только одно выражение. Он не может содержать никаких операторов и возвращает объект функции, который может быть назначен любой переменной.
Пример:
def add(x, y): return x + y # Вызываем функцию add(2, 3) # Результат: 5
Выше мы создали функцию с именем add, которая принимает два аргумента x и y и возвращает их сумму.
Давайте посмотрим как эта простейшая функция будет выглядить с применением lambda:
add = lambda x, y : x + y print add(2, 3) # Результат: 5
В lambda x, y: x + y; x и y являются аргументами функции, а x + y - это выражение, которое выполняется, и его значения возвращаются в качестве вывода.
lambda x, y: x + y возвращает объект функции, который может быть назначен любой переменной, в этом случае функциональный объект присваивается переменной add.
type (add) # Возвращет: function
Если мы проверим тип add, это function.
map
Базовый синтаксис:
map(function_object, iterable1, iterable2,...)
Функция map первым аргументом ожидает объект функции и любое количество объектов для перебора, таких как dict или list. Он выполняет function_object для каждого элемента в последовательности и возвращает список элементов, измененных объектом функции.
def multiply2(x): return x * 2 map(multiply2, [1, 2, 3, 4]) # Вернет [2, 4, 6, 8]
В приведенном выше примере map выполняет функцию multiply2 для каждого элемента в списке [1, 2, 3, 4] и возвращает [2, 4, 6, 8]
Давайте посмотрим, как мы можем написать приведенный выше код с помощью map и lambda.
map(lambda x : x*2, [1, 2, 3, 4]) #Вернет [2, 4, 6, 8]
Всего одна строка кода и все.
dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}] map(lambda x : x['name'], dict_a) # Вернет: ['python', 'java'] map(lambda x : x['points']*10, dict_a) # Вернет: [100, 80] map(lambda x : x['name'] == "python", dict_a) # Вернет: [True, False]
В приведенном выше примере каждый объект dict_a будет передан как параметр функции лямбда
filter
Базовый синтаксис:
filter(function_object, iterable)
Функция filter ожидает два аргумента, function_object и iterable. function_object должна возвращать логическое значение. function_object вызывается для каждого элемента итерации, и фильтр возвращает только те элементы, для которых function_object возвращает true.
Подобно функции map, функция filter также возвращает список элементов. В отличие от map функция filter может принять только один итерируемый объект.
Пример:
a = [1, 2, 3, 4, 5, 6] filter(lambda x : x % 2 == 0, a) # Вернет: [2, 4, 6]
Обработка объектов:
dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}] filter(lambda x : x['name'] == 'python', dict_a) # Вернет: [{'name': 'python', 'points': 10}]