Что именно удерживает замыкание после завершения внешней функции?
База Hintsage
Функции и декораторы
Замыкания, decorators, callable-объекты и управление контекстом.
Практика
Вопросы: Функции и декораторы
В каком случае для декоратора с состоянием предпочтительнее вызываемый объект, а не замыкание?
Как объект, переданный в конструкцию with, участвует в освобождении ресурса при выходе из блока?
На каком этапе Python применяет декоратор к функции: при её определении или при вызове?
При создании функций в цикле какое значение они используют при последующем вызове — текущее или сохранённое на итерации?
Зачем обёртке декоратора нужен атрибут __wrapped__?
Представьте функцию с двумя декораторами: какой декоратор фактически вызывается первым?
Какое значение должен вернуть метод выхода контекстного менеджера, чтобы исключение из блока with не покинуло этот блок?
В практической ситуации декоратор заменяет метод вызываемым объектом: почему вызов через экземпляр может потерять автоматическую передачу self?
Какой риск возникает, если один экземпляр контекстного менеджера используется как декоратор рекурсивной функции?
Объясните, как генераторный контекстный менеджер обрабатывает исключение, возникшее внутри блока with.
Что произойдёт при вызове экземпляра, если __call__ задан только как атрибут этого экземпляра, но не определён в его классе?
Объясните механизм: как замыкание сохраняет изменяемое состояние между вызовами внутренней функции через nonlocal?
Разберите ситуацию: какие методы контекстных менеджеров будут вызваны, если второй менеджер не смог войти в составной блок with?
class M:
def __init__(self, name, fail=False):
self.name, self.fail = name, fail
def __enter__(self):
print("enter", self.name)
if self.fail:
raise RuntimeError(self.name)
return self
def __exit__(self, *exc):
print("exit", self.name)
return False
with M("A") as a, M("B", True) as b:
print("body")
Зачем декоратору с параметрами нужен дополнительный уровень вызова?
Для обработчика, который передаётся в multiprocessing, почему замыкание может оказаться непригодным, тогда как экземпляр вызываемого класса часто подходит?
В блоке with контекстный менеджер возвращает из enter не себя: что получит переменная после as?
Сравните два способа декорирования свойства: какой вариант завершится ошибкой при обращении к User().name и почему?
def audit(fn):
def wrapper(*args):
print("audit")
return fn(*args)
return wrapper
class User:
@audit
@property
def name(self):
return "Ada"
print(User().name)
Когда для управления ресурсами нужен ExitStack вместо обычного with?
Разберите последствие: что станет с именем функции, если декоратор вернёт невызываемый объект?
Показано 1–20 из 50