Счетчик просмотров55

map, filter и lambda

Оглавление
map, filter и lambdamap — применить функцию ко всемfilter — оставить подходящиеlambda — функция без имениАргументов может быть сколько угодно Ветвление внутри lambdaЧто lambda не умеетЗачем она нужна: функция как аргументТо же через генератор

map, filter и lambda

map — применить функцию ко всем

map применяет функцию к каждому элементу последовательности. Самое частое применение — превратить список строк в список чисел:

PYTHON-КОД
1
2

 

Результат оборачиваем в list(), чтобы увидеть значения.

filter — оставить подходящие

PYTHON-КОД
1
2
3

lambda — функция без имени

lambda создаёт функцию прямо в том месте, где она нужна, не давая ей имени. Отсюда и название — анонимная функция.

Общий вид записи:

PYTHON-КОД
1

Слева от двоеточия — параметры (как в скобках у def), справа — одно выражение, значение которого возвращается автоматически. Слово return не пишется: его там просто нет.

Эти две записи делают ровно одно и то же:

PYTHON-КОД
1
2
3
4

Аргументов может быть сколько угодно 

PYTHON-КОД
1
2
3
4

Ветвление внутри lambda

Обычный if — это инструкция, внутрь lambda он не помещается. Зато помещается тернарный оператор — он является выражением:

PYTHON-КОД
1
2

Что lambda не умеет

МожноНельзя
одно выражениенесколько строк кода
тернарный if ... else ...обычные if:, for:, while:
вызов других функцийприсваивание переменной
вернуть кортеж, список, словарьreturn и print как инструкции

Как только логика перестаёт помещаться в одну строку — пиши обычный def. Это не хуже, а на экзамене читается понятнее.

Баннер статьи

Зачем она нужна: функция как аргумент

Главный смысл lambda в том, что функцию можно передать внутрь другой функции. sorted, max, min, filter принимают параметр key — функцию, которая говорит, по чему сравнивать:

PYTHON-КОД
1
2
3

Ради такой одноразовой функции заводить отдельный def и придумывать ей имя не хочется — для этого lambda и придумали. Подробно про сортировку по нескольким критериям — в статье «Сортировка по ключу: sorted, key, lambda».

Иногда lambda не нужна вовсе: если подходящая функция уже существует, передавай её саму.

PYTHON-КОД
1
2

То же через генератор

Почти всё, что делают map и filter, можно записать списочным выражением — многим так понятнее:

Через функциюЧерез генератор
list(map(int, parts))[int(x) for x in parts]
list(filter(lambda x: x > 0, a))[x for x in a if x > 0]

Оцените статью

Другие статьи по предмету

Другие статьи не найдены