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 * 2lru_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 подскажет развёрнутый ответ в реальном времени.