Обычно протокол управления контекстом реализовывают с помощью класса и двух магических методов:
__enter__ и __exit__. Но такой подход может показаться слегка сложным.Так вот, помимо написания своего класса, есть еще один способ создать контекстный менеджер — использовать декоратор
@contextmanager из встроенного пакета contextlib.Первая часть функции
tag, которая идёт до yield, выполняется при входе в блок with. Затем исполняется сам этот блок, а после этого завершается оставшаяся часть, которая идет после yield.#contextlib
