Ответ
Модуль functools — это часть стандартной библиотеки Python, предоставляющая высокоуровневые функции для работы с другими функциями или вызываемыми объектами. Он используется для функционального программирования, оптимизации и упрощения кода.
Основные функции и их применение:
@lru_cache(maxsize=128): Декоратор для мемоизации (кэширования) результатов функции. Ускоряет повторные вызовы функций с одинаковыми аргументами, особенно полезен для рекурсивных функций или дорогих вычислений.functools.partial(func, *args, **kwargs): Создаёт новую функцию с частично применёнными аргументами. Позволяет "зафиксировать" некоторые аргументы исходной функции, упрощая её использование в контекстах, где требуется функция с меньшим числом параметров (например, в колбэках).@functools.wraps(wrapped): Декоратор, используемый при создании других декораторов. Он копирует имя, docstring, модуль и другие метаданные оборачиваемой функции в функцию-обёртку, что улучшает отладку и интроспекцию.functools.reduce(function, iterable[, initializer]): Применяет функцию к элементам последовательности, сводя её к единственному значению. (В Python 3 перенесён из встроенных функций вfunctools).
Пример использования @lru_cache:
from functools import lru_cache
@lru_cache(maxsize=None) # maxsize=None означает неограниченный кэш
def fibonacci(n: int) -> int:
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
# Без кэша вычисление fibonacci(30) было бы значительно медленнее
print(fibonacci(30))
Пример использования functools.partial:
from functools import partial
def power(base: int, exponent: int) -> int:
return base ** exponent
# Создаём новую функцию, которая возводит число в квадрат
square = partial(power, exponent=2)
print(square(5)) # Выведет 25 (5^2)
# Создаём функцию, которая возводит 2 в степень
power_of_two = partial(power, base=2)
print(power_of_two(3)) # Выведет 8 (2^3)