Какие элементы функционального программирования поддерживает Python?

Ответ

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 для мемоизации.