yield

Tworzy generator: funkcję zwracającą kolejne wartości na żądanie.

Na tej stronie

Przykład

#
Python
def levels(start, stop):
    level = start
    while level <= stop:
        yield level, level * 100
        level += 1

for level, exp in levels(1, 3):
    print(f"Poziom {level}: {exp} EXP")

gen = levels(5, 6)
print(next(gen))
Wynikzapisany wynik, możesz go sprawdzić
Poziom 1: 100 EXP
Poziom 2: 200 EXP
Poziom 3: 300 EXP
(5, 500)

Definicja i zastosowanie

#

Funkcja zawierająca yield staje się generatorem. Zamiast zwrócić jeden wynik i się zakończyć, „wstrzymuje się” na każdym yield, oddaje wartość i wznawia pracę przy prośbie o następną.

Generatory produkują elementy leniwie, jeden po drugim. Dzięki temu możesz przetwarzać bardzo duże dane, na przykład linie ogromnego pliku, bez wczytywania wszystkiego do pamięci, a nawet opisywać nieskończone ciągi.

Po generatorze przechodzi się pętlą for albo pobiera kolejne wartości funkcją next(). Zapis yield from inny przekazuje wszystkie wartości innego generatora lub kolekcji.

Składnia

#
Składnia
def generator():
    yield wartosc

Dobre praktyki

#
  • Generator można przejść tylko raz. Jeśli potrzebujesz danych kilka razy, zamień go na listę przez list().
  • Do prostych generatorów wystarczy wyrażenie generatorowe: (x * x for x in numbers).

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.