Замыкание сохраняет доступ к переменным внешней функции после её завершения. Параметризованный декоратор использует три уровня: параметры → функция → вызов обёртки.
Что такое замыкание (closure) в Python и как на основе этого механизма работают декораторы? Напишите или объясните, как создать параметризованный декоратор, который сам принимает аргументы.
Замыкание сохраняет доступ к переменным внешней функции после её завершения. Параметризованный декоратор использует три уровня: параметры → функция → вызов обёртки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Замыкание сохраняет доступ к переменным внешней функции после её завершения. Параметризованный декоратор использует три уровня: параметры → функция → вызов обёртки.
from functools import wraps
def tagged(label):
def decorate(func):
@wraps(func)
def wrapper(*args, **kwargs):
print(label)
return func(*args, **kwargs)
return wrapper
return decorate
@tagged('start')
def add(a, b):
return a + b
label сохраняется в замыкании фабрики, а func — в замыкании обёртки. Выражение @tagged('start') сначала получает декоратор, затем применяет его к add. wraps сохраняет имя и другие метаданные. Здесь показан синхронный вариант; асинхронному нужен await.