Sobes.tech
Junior — Middle

Необходимо ли е да се използва ключовата дума yield в реализирането на контекстен мениджър в Python?

sobes.tech AI

Отговор от AI

Ключовата дума yield трябва да се използва вътре в реализацията на контекстен мениджър, ако го създавате с помощта на декоратора @contextmanager от модула contextlib.

Пример:

from contextlib import contextmanager

@contextmanager
def open_file(path):
    f = open(path, 'r')
    try:
        yield f  # предаваме управлението и ресурса
    finally:
        f.close()

Тук yield разделя кода на две части: преди yield — подготовка на ресурса, след — почистване.

Ако, обаче, контекстният мениджър е реализиран чрез клас с методи __enter__ и __exit__, yield не се използва.