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
. Используя эти инструменты, вы сможете писать более лаконичный, эффективный и пригодный для повторного использования код.