Функции как объекты
В 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))