Ответ
Python не является чисто функциональным языком, но включает в себя множество элементов из этой парадигмы, позволяя писать код в функциональном стиле.
Основные элементы:
-
Функции как объекты первого класса: Функции можно присваивать переменным, передавать в качестве аргументов и возвращать из других функций.
-
Функции высшего порядка: Функции, которые принимают другие функции в качестве аргументов или возвращают их. Классические примеры:
map(),filter(),reduce().numbers = [1, 2, 3, 4] # map применяет лямбда-функцию к каждому элементу squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16] -
Лямбда-функции: Анонимные однострочные функции, создаваемые с помощью ключевого слова
lambda.add = lambda a, b: a + b print(add(5, 3)) # 8 -
Замыкания (Closures): Внутренние функции, которые «помнят» и имеют доступ к переменным из локальной области видимости внешней функции, даже после того как внешняя функция завершила свое выполнение.
def outer_func(msg): def inner_func(): print(msg) return inner_func printer = outer_func("Hello, World!") printer() # Выведет "Hello, World!" -
Иммутабельные типы данных: Встроенные типы, такие как
tuple,frozenset,str, чьи значения нельзя изменить после создания. Это ключевая концепция ФП для избежания побочных эффектов. -
Генераторы и ленивые вычисления: Генераторы, создаваемые с помощью
yield, вычисляют значения по мере необходимости, что экономит память и повышает производительность. -
Модуль
functools: Содержит утилиты для работы с функциями, такие какpartialдля частичного применения функций,reduceдля свертки последовательностей иlru_cacheдля мемоизации.