📖 Теория

⚡ Кратко: теория

Функцию передают без скобок: square, а не square().

Lambda - короткая анонимная функция из одного выражения.

Функции высшего порядка принимают или возвращают другие функции.

map() преобразует элементы, filter() отбирает элементы, reduce() сводит коллекцию к одному значению.

any() возвращает True при хотя бы одном истинном элементе.

all() возвращает True, если все элементы истинны; для пустой коллекции это True.

sorted(), min() и max() принимают key-функцию для критерия сравнения.

Сложную lambda лучше заменить именованной функцией def.

Топ-3 ошибки: передать результат функции вместо ссылки; забыть list() вокруг map/filter; писать слишком сложную lambda вместо понятной функции.

Функции как объекты

В Python функция - объект. Её можно присвоить переменной, положить в словарь или передать другой функции.

Если написать function(), функция выполнится сразу; если написать function, передаётся ссылка.

def square(x):
    return x * x

def apply_function(func, value):
    return func(value)

print(apply_function(square, 5))

Lambda-функции

lambda arguments: expression создаёт короткую функцию без имени.

Lambda автоматически возвращает значение выражения и не содержит многострочный блок.

square = lambda x: x ** 2
add = lambda x, y: x + y
print(square(4))
print(add(3, 5))

Парадигмы и функциональное программирование

Python поддерживает процедурный, объектно-ориентированный и функциональный стиль.

Функциональный стиль делает упор на чистые функции, неизменяемость и передачу функций как значений.

def pure_add(a, b):
    return a + b

print(pure_add(2, 3))

map, filter, reduce

map() применяет функцию к каждому элементу, filter() оставляет элементы по условию, reduce() накапливает итоговое значение.

map и filter возвращают итераторы, поэтому для вывода часто используют list().

from functools import reduce

numbers = [1, 2, 3, 4]
print(list(map(lambda x: x ** 2, numbers)))
print(list(filter(lambda x: x % 2 == 0, numbers)))
print(reduce(lambda x, y: x + y, numbers))

any, all и key

any() и all() коротко проверяют набор условий.

Параметр key позволяет сортировать и искать минимум/максимум по вычисленному критерию.

words = ["apple", "banana", "kiwi"]
print(any(len(word) > 5 for word in words))
print(all(len(word) > 0 for word in words))
print(sorted(words, key=len))
print(max(words, key=len))
Проверить по документации: современные детали поведения встроенных функций, стандартной библиотеки и версии Python сверяйте с официальной документацией.