Python, будучи универсальным языком программирования, предлагает множество встроенных модулей и библиотек для упрощения и улучшения процесса разработки. Одним из таких модулей является functools, который предоставляет удобные инструменты для работы с функциями, декораторами и функциями высшего порядка. В этой статье мы рассмотрим различные методы, предлагаемые модулем functools, а также примеры кода, демонстрирующие их использование.
- Частичные функции:
Частичные функции позволяют вам фиксировать определенное количество аргументов функции и генерировать новую функцию. Функцияpartialиз модуляfunctoolsпозволяет нам добиться этого. Вот пример:
from functools import partial
def multiply(x, y):
return x * y
# Create a new function with fixed argument
double = partial(multiply, y=2)
print(double(5)) # Output: 10
- Кэширование с помощью lru_cache:
Декораторlru_cache— это мощный инструмент для кэширования результатов функции, который может значительно повысить производительность при выполнении дорогостоящих вычислений или повторяющихся вызовов функций. Вот пример:
from functools import lru_cache
@lru_cache(maxsize=128)
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # Output: 55
- Мемоизация с кешем.
Декораторcacheвfunctoolsпредоставляет простой метод мемоизации для кэширования результатов функции. Он похож наlru_cache, но без ограничения размера. Вот пример:
from functools import cache
@cache
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
print(factorial(5)) # Output: 120
- Обтекание функций с помощью оберток.
Декораторwrapsполезен при создании декораторов. Он сохраняет метаданные исходной функции, такие как ее имя, строка документации и модуль, что может быть полезно для отладки и самоанализа. Вот пример:
from functools import wraps
def debug_decorator(func):
@wraps(func)
def wrapper(*args, kwargs):
print(f"Calling function: {func.__name__}")
return func(*args, kwargs)
return wrapper
@debug_decorator
def add(a, b):
return a + b
print(add(2, 3)) # Output: Calling function: add \n 5
Модуль functoolsв Python предоставляет ряд мощных методов для упрощения манипулирования функциями, кэширования и декорирования. В этой статье мы рассмотрели различные методы, включая частичные функции, кэширование с помощью lru_cache, запоминание с помощью cacheи перенос функций с помощью wraps. Используя эти инструменты, вы сможете писать более лаконичный, эффективный и пригодный для повторного использования код.