yield
Tworzy generator: funkcję zwracającą kolejne wartości na żądanie.
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 wartoscDobre 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
#- returnKończy funkcję i zwraca wartość do miejsca wywołania.
- forPętla przechodząca po kolejnych elementach sekwencji lub innego obiektu iterowalnego.
- Wyrażenia listoweZwięzły sposób tworzenia list, zbiorów i słowników z innych kolekcji.
- itertoolsNarzędzia do pracy z iteratorami: łączenie, grupowanie, kombinacje i nieskończone ciągi.
- iter()Zwraca iterator dla kolekcji, czyli obiekt podający jej elementy po jednym. Na tym mechanizmie opiera się pętla for.
- next()Pobiera następny element z iteratora. Po jego wyczerpaniu zwraca wartość domyślną albo zgłasza StopIteration.
Widzisz błąd albo brakuje przykładu? Napisz do nas.