Mediumfunctools

Что такое functools?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

functools — модуль с higher-order функциями.

from functools import reduce, partial, lru_cache, wraps, singledispatch

# reduce — left fold
reduce(lambda a, b: a + b, [1, 2, 3], 0)   # 6

# partial — фиксирует часть аргументов
add2 = partial(add, 2)
add2(3)   # 5

# wraps — копирует __name__, __doc__ в wrapper (для decorator-ов)
@wraps(func)
def wrapper(*a, **kw): ...

# singledispatch — generic function по типу первого аргумента
@singledispatch
def process(x): raise NotImplementedError
@process.register
def _(x: int): return x * 2
  • lru_cache — memoization;
  • total_ordering — генерирует __lt__, __le__, ... из __eq__ + одного;
  • cmp_to_key(cmp) — обёртка cmp в key для sorted;
  • cached_property (3.8), cache (3.9, alias для lru_cache(None)).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.