Что важно знать
- Функции — объекты первого класса.
- Замыкание запоминает переменные внешней функции;
nonlocal. - Декоратор — функция, возвращающая обёртку;
functools.wrapsсохраняет имя и документацию.
Аргументы, замыкания, декораторы с параметрами и functools.
nonlocal.functools.wraps сохраняет имя и документацию.Практика. Написать декоратор замера времени и декоратор повторов.
Практика. Написать декоратор повторов с параметрами (число попыток, исключения, пауза), работающий и для async-функций.
Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.
args собирает лишние позиционные аргументы в кортеж, kwargs — лишние именованные в словарь.
Полный разборДекоратор с параметрами — фабрика декораторов: функция принимает параметры и возвращает обычный декоратор, т. е. три уровня вложенности. functools.wraps копирует в обёртку __name__, __doc__, __module__, __qualname__ и ставит __wrapped__ — иначе логи…
Полный разборНи то ни другое в классическом смысле: передаётся ссылка на объект (call by sharing).
Полный разборlru_cache(maxsize) — мемоизация с вытеснением давно неиспользуемых; cache (3.9) — без ограничения. Аргументы должны быть хешируемыми. partial — зафиксировать часть аргументов. singledispatch — перегрузка по типу первого аргумента. cached_property — вычислить…
Полный разборЗамыкание — вложенная функция, которая помнит переменные внешней функции после её завершения.
Полный разборЗамыкание захватывает переменную, а не её значение: значение читается в момент вызова. К моменту вызова цикл закончился, и все лямбды видят последнее значение i. Исправление — зафиксировать значение: аргумент по умолчанию (lambda i=i: i) или functools.partial.
Полный разборДекоратор — функция, которая принимает функцию и возвращает новую; @dec — сахар для f = dec(f).
Полный разборИмя ищется по цепочке LEGB: Local → Enclosing → Global → Built-in.
Полный разборЗначение по умолчанию вычисляется один раз — при определении функции, а не при каждом вызове.
Полный разборКак передаются аргументы, *args и **kwargs, LEGB, ловушка изменяемого значения по умолчанию, замыкания и позднее связывание, декораторы и functools.
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.