Sobes.tech
Junior — Middle

Da li je potrebno koristiti ključnu reč yield unutar implementacije menadžera konteksta u Pythonu?

sobes.tech АИ

Одговор од АИ

Ključna reč yield mora biti korišćena unutar implementacije menadžera konteksta ako ga kreirate pomoću dekoratora @contextmanager iz modula contextlib.

Primer:

from contextlib import contextmanager

@contextmanager
def open_file(path):
    f = open(path, 'r')
    try:
        yield f  # prenosimo kontrolu i resurs
    finally:
        f.close()

Ovde, yield deli kod na dva dela: pre yield — priprema resursa, posle — čišćenje.

Ako je, umesto toga, menadžer konteksta implementiran putem klase sa metodama __enter__ i __exit__, yield se ne koristi.